Linux: usb: core: clear both ep_in and ep_out for non-ep0 control endpoints
What fixes it
- 198d74dcfa129523125f46a89479d3b446b17dbeLinuxCVE List
- 7a9f61476b0e8002092a52ee8295edeeb0a28d1eLinuxCVE List
- 1da16c46b8d7101b74bc2d72a04e23cf5c7ddea1LinuxCVE List
- 0e8baa78d872f2db440d8b9ded946ab8dceb89ebLinuxCVE 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: core: clear both ep_in and ep_out for non-ep0 control endpoints
In usb_enable_endpoint(), non-zero control endpoints (where usb_endpoint_xfer_control(&ep->desc) is true) populate both dev->ep_in[epnum] and dev->ep_out[epnum] with the same struct usb_host_endpoint pointer.
However, usb_disable_endpoint() only clears either dev->ep_out[epnum] or dev->ep_in[epnum] depending on the direction bit of epaddr when reset_hardware is set, leaving the opposite direction's array slot pointing to the disabled/freed endpoint.
Clear both dev->ep_out[epnum] and dev->ep_in[epnum] when disabling a non-ep0 control endpoint with reset_hardware set, and update the function kerneldoc accordingly.
Tested in QEMU against Linux 7.3.0-rc3 using dummy_hcd and raw-gadget to enumerate a USB device with a non-zero control endpoint (bEndpointAddress 0x01, bmAttributes USB_ENDPOINT_XFER_CONTROL), verifying that both dev->ep_in[1] and dev->ep_out[1] are cleared when the interface is disabled.
Text from CVE List
Affected versions 12
- Linuxaffected: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 before 198d74dcfa129523125f46a89479d3b446b17dbeCVE List
- Linuxaffected: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 before 7a9f61476b0e8002092a52ee8295edeeb0a28d1eCVE List
- Linuxaffected: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 before 1da16c46b8d7101b74bc2d72a04e23cf5c7ddea1CVE List
- Linuxaffected: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 before c50413ecb662ea43c7f487632c8114721743a277CVE List
- Linuxaffected: 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 before 0e8baa78d872f2db440d8b9ded946ab8dceb89ebCVE List
- Linuxaffected: 2.6.12CVE List
- Linuxunaffected: all versions before 2.6.12CVE List
- Linuxunaffected: 6.6.160 through 6.6.*CVE List
- Linuxunaffected: 6.12.113 through 6.12.*CVE List
- Linuxunaffected: 6.18.56 through 6.18.*CVE List
- Linuxunaffected: 7.2.10 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List
References 5
- git.kernel.org/stable/c/198d74dcfa129523125f46a89479d3b446b17dbeReferencevia CVE List
- git.kernel.org/stable/c/7a9f61476b0e8002092a52ee8295edeeb0a28d1eReferencevia CVE List
- git.kernel.org/stable/c/1da16c46b8d7101b74bc2d72a04e23cf5c7ddea1Referencevia CVE List
- git.kernel.org/stable/c/c50413ecb662ea43c7f487632c8114721743a277Referencevia CVE List
- git.kernel.org/stable/c/0e8baa78d872f2db440d8b9ded946ab8dceb89ebReferencevia CVE List