Linux: usb: gadget: goku_udc: avoid NULL deref of dev->driver in INT_USBRESET log
What fixes it
- 999ff3bf665f2abfb6af519ef3d6d42b061d3c15LinuxCVE List
- 10d7fc3008d5b7ec03af8e08927f1d090014c2afLinuxCVE List
- 28d78783a871cdb7a637dcb72452ff7d303430aeLinuxCVE List
- 5bf5e3fba9bc7dfd69701521dbe9809f8ccbdb02LinuxCVE List
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
In the Linux kernel, the following vulnerability has been resolved:
usb: gadget: goku_udc: avoid NULL deref of dev->driver in INT_USBRESET log
goku_irq() handles a number of bus events under a single ep0 path. It already guards the gadget driver suspend/resume callbacks against a NULL ->driver:
if (dev->gadget.speed != USB_SPEED_UNKNOWN && dev->driver && dev->driver->resume) { spin_unlock(&dev->lock); dev->driver->resume(&dev->gadget); ... }
but the very next branch unconditionally dereferences dev->driver when an INT_USBRESET arrives:
if (stat & INT_USBRESET) { ACK(INT_USBRESET); INFO(dev, "USB reset done, gadget %s\n", dev->driver->driver.name); }
If the controller raises INT_USBRESET before any gadget driver has been bound (or after one has been unbound), dev->driver is NULL and the printk dereferences NULL.
smatch flags the inconsistency:
drivers/usb/gadget/udc/goku_udc.c:1618 goku_irq() error: we previously assumed 'dev->driver' could be null (see line 1607)
Fall back to a placeholder when the gadget driver is not bound.
No functional change while a gadget driver is bound.
Text from CVE List
Affected versions 16
- Linuxaffected: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 before d7b33afbf9b54b61cb423af9663df54eae11d3b1CVE List
- Linuxaffected: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 before ea2901a4a90afc662e4d023542d91f10ab10fd3cCVE List
- Linuxaffected: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 before 999ff3bf665f2abfb6af519ef3d6d42b061d3c15CVE List
- Linuxaffected: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 before a018d4195114ca2cf79858cc45c98581dee4795bCVE List
- Linuxaffected: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 before 10d7fc3008d5b7ec03af8e08927f1d090014c2afCVE List
- Linuxaffected: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 before 28d78783a871cdb7a637dcb72452ff7d303430aeCVE List
- Linuxaffected: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 before 5bf5e3fba9bc7dfd69701521dbe9809f8ccbdb02CVE List
- Linuxaffected: 2.6.12CVE List
- Linuxunaffected: all versions before 2.6.12CVE List
- Linuxunaffected: 5.10.271 through 5.10.*CVE List
- Linuxunaffected: 5.15.222 through 5.15.*CVE List
- Linuxunaffected: 6.1.189 through 6.1.*CVE List
- Linuxunaffected: 6.6.158 through 6.6.*CVE List
- Linuxunaffected: 6.12.111 through 6.12.*CVE List
- Linuxunaffected: 6.18.53 through 6.18.*CVE List
- Linuxunaffected: 7.2CVE List
References 7
- git.kernel.org/stable/c/d7b33afbf9b54b61cb423af9663df54eae11d3b1Referencevia CVE List
- git.kernel.org/stable/c/ea2901a4a90afc662e4d023542d91f10ab10fd3cReferencevia CVE List
- git.kernel.org/stable/c/999ff3bf665f2abfb6af519ef3d6d42b061d3c15Referencevia CVE List
- git.kernel.org/stable/c/a018d4195114ca2cf79858cc45c98581dee4795bReferencevia CVE List
- git.kernel.org/stable/c/10d7fc3008d5b7ec03af8e08927f1d090014c2afReferencevia CVE List
- git.kernel.org/stable/c/28d78783a871cdb7a637dcb72452ff7d303430aeReferencevia CVE List
- git.kernel.org/stable/c/5bf5e3fba9bc7dfd69701521dbe9809f8ccbdb02Referencevia CVE List