Date: Fri, 08 Jan 2016 14:47:35 +0000 From: bugzilla-noreply@freebsd.org To: freebsd-bugs@FreeBSD.org Subject: [Bug 206035] gpiobus causes panic when attached to gpio with a single pin Message-ID: <bug-206035-8@https.bugs.freebsd.org/bugzilla/>
next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D206035 Bug ID: 206035 Summary: gpiobus causes panic when attached to gpio with a single pin Product: Base System Version: 11.0-CURRENT Hardware: Any OS: Any Status: New Severity: Affects Only Me Priority: --- Component: kern Assignee: freebsd-bugs@FreeBSD.org Reporter: sgalabov@gmail.com Created attachment 165265 --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=3D165265&action= =3Dedit Suggested fix for the problem (please see comments for details) While attaching a gpiobus to a GPIO controller with a single pin, the system panics due to a failed KASSERT in gpiobus_init_softc(). This is due to the fact that gpiobus obtains the maximum pin number from the GPIO controller (via GPIO_PIN_MAX) and immediately does a KASSERT, expecting that the obtained value is !=3D 0. In the case of a GPIO controller which controls a single pin, the returned value will be 0 (0 is the maximum pin number), which is absolutely valid. Moreover, right after the KASSERT the code in gpiobus_init_softc() actually adjusts the number of pins to the right value. The suggestion is to change the KASSERT like so: - KASSERT(sc->sc_npins !=3D 0, ("GPIO device with no pins")); + KASSERT(sc->sc_npins >=3D 0, ("GPIO device with no pins")); This, I believe, is a better approach than, say, simply postponing the KASS= ERT until after gpiobus has adjusted the number of pins, since if a broken GPIO controller driver returns a < 0 value we'll be in even more trouble. I've attached a patch with the suggested fix. --=20 You are receiving this mail because: You are the assignee for the bug.=
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-206035-8>