WSL2-Linux-Kernel/drivers/usb
Alan Stern 2bd8534a1b USB: core: Fix duplicate endpoint bug by clearing reserved bits in the descriptor
commit a368ecde8a5055b627749b09c6218ef793043e47 upstream.

Syzbot has identified a bug in usbcore (see the Closes: tag below)
caused by our assumption that the reserved bits in an endpoint
descriptor's bEndpointAddress field will always be 0.  As a result of
the bug, the endpoint_is_duplicate() routine in config.c (and possibly
other routines as well) may believe that two descriptors are for
distinct endpoints, even though they have the same direction and
endpoint number.  This can lead to confusion, including the bug
identified by syzbot (two descriptors with matching endpoint numbers
and directions, where one was interrupt and the other was bulk).

To fix the bug, we will clear the reserved bits in bEndpointAddress
when we parse the descriptor.  (Note that both the USB-2.0 and USB-3.1
specs say these bits are "Reserved, reset to zero".)  This requires us
to make a copy of the descriptor earlier in usb_parse_endpoint() and
use the copy instead of the original when checking for duplicates.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Reported-and-tested-by: syzbot+8693a0bb9c10b554272a@syzkaller.appspotmail.com
Closes: https://lore.kernel.org/linux-usb/0000000000003d868e061bc0f554@google.com/
Fixes: 0a8fd13462 ("USB: fix problems with duplicate endpoint addresses")
CC: Oliver Neukum <oneukum@suse.com>
CC: stable@vger.kernel.org
Link: https://lore.kernel.org/r/205a5edc-7fef-4159-b64a-80374b6b101a@rowland.harvard.edu
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-07-18 13:07:41 +02:00
..
atm usb: atm: cxacru: fix endpoint checking in cxacru_bind() 2024-07-05 09:14:47 +02:00
c67x00
cdns3 usb: cdns3: fix memory double free when handle zero packet 2024-03-01 13:21:49 +01:00
chipidea usb: chipidea: wait controller resume finished for wakeup irq 2024-01-25 14:52:47 -08:00
class USB: class: cdc-wdm: Fix CPU lockup caused by excessive log messages 2024-07-05 09:14:14 +02:00
common usb: common: usb-conn-gpio: Prevent bailing out if initial role is none 2023-08-16 18:21:59 +02:00
core USB: core: Fix duplicate endpoint bug by clearing reserved bits in the descriptor 2024-07-18 13:07:41 +02:00
dwc2 usb: dwc2: host: Fix dereference issue in DDMA completion flow. 2024-04-27 17:05:27 +02:00
dwc3 usb: dwc3: core: remove lock of otg mode during gadget suspend/resume to avoid deadlock 2024-07-05 09:14:47 +02:00
early usb: early: xhci-dbc: Fix a potential out-of-bound memory access 2023-03-10 09:39:39 +01:00
gadget usb: gadget: configfs: Prevent OOB read/write in usb_string_copy() 2024-07-18 13:07:41 +02:00
host xhci: Apply broken streams quirk to Etron EJ188 xHCI host 2024-07-05 09:14:15 +02:00
image
isp1760 usb: isp1760: Fix out-of-bounds array access 2022-06-09 10:22:27 +02:00
misc usb: misc: uss720: check for incompatible versions of the Belkin F5U002 2024-07-05 09:14:28 +02:00
mon usb: mon: Fix atomicity violation in mon_bin_vma_fault 2024-01-25 14:52:47 -08:00
mtu3 usb: mtu3: fix kernel panic at qmu transfer done irq handler 2023-05-11 23:00:33 +09:00
musb usb: musb: da8xx: fix a resource leak in probe() 2024-07-05 09:14:47 +02:00
phy Revert "usb: phy: generic: Get the vbus supply" 2024-04-10 16:19:40 +02:00
renesas_usbhs usb: renesas: Fix refcount leak bug 2022-08-25 11:40:33 +02:00
roles usb: roles: don't get/set_role() when usb_role_switch is unregistered 2024-03-01 13:21:50 +01:00
serial USB: serial: mos7840: fix crash on resume 2024-07-18 13:07:41 +02:00
storage usb-storage: alauda: Check whether the media is initialized 2024-07-05 09:14:23 +02:00
typec usb: typec: tcpm: Ignore received Hard Reset in TOGGLING state 2024-07-05 09:14:14 +02:00
usbip USB: usbip: fix stub_dev hub disconnect 2023-11-20 11:08:26 +01:00
Kconfig
Makefile
usb-skeleton.c