In the Linux kernel, the following vulnerability has been resolved:
USB: core: Fix race by not overwriting udev->descriptor in hub_port_init()
Syzbot reported an out-of-bounds read in sysfs.c:read_descriptors():
BUG: KASAN: slab-out-of-bounds in read_descriptors+0x263/0x280 drivers/usb/core/sysfs.c:883 Read of size 8 at addr ffff88801e78b8c8 by task udevd/5011
CPU: 0 PID: 5011 Comm: udevd Not tainted 6.4.0-rc6-syzkaller-00195-g40f71e7cd3c6 #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 05/27/2023 Call Trace: <TASK> __dump_stack lib/dump_stack.c:88 [inline] dump_stack_lvl+0xd9/0x150 lib/dump_stack.c:106 print_address_description.constprop.0+0x2c/0x3c0 mm/kasan/report.c:351 print_report mm/kasan/report.c:462 [inline] kasan_report+0x11c/0x130 mm/kasan/report.c:572 read_descriptors+0x263/0x280 drivers/usb/core/sysfs.c:883 ... Allocated by task 758: ... __do_kmalloc_node mm/slab_common.c:966 [inline] __kmalloc+0x5e/0x190 mm/slab_common.c:979 kmalloc include/linux/slab.h:563 [inline] kzalloc include/linux/slab.h:680 [inline] usb_get_configuration+0x1f7/0x5170 drivers/usb/core/config.c:887 usb_enumerate_device drivers/usb/core/hub.c:2407 [inline] usb_new_device+0x12b0/0x19d0 drivers/usb/core/hub.c:2545
As analyzed by Khazhy Kumykov, the cause of this bug is a race between read_descriptors() and hub_port_init(): The first routine uses a field in udev->descriptor, not expecting it to change, while the second overwrites it.
Prior to commit 45bf39f8df7f ("USB: core: Don't hold device lock while reading the "descriptors" sysfs file") this race couldn't occur, because the routines were mutually exclusive thanks to the device locking. Removing that locking from read_descriptors() exposed it to the race.
The best way to fix the bug is to keep hub_port_init() from changing udev->descriptor once udev has been initialized and registered. Drivers expect the descriptors stored in the kernel to be immutable; we should not undermine this expectation. In fact, this change should have been made long ago.
So now hub_port_init() will take an additional argument, specifying a buffer in which to store the device descriptor it reads. (If udev has not yet been initialized, the buffer pointer will be NULL and then hub_port_init() will store the device descriptor in udev as before.) This eliminates the data race responsible for the out-of-bounds read.
The changes to hub_port_init() appear more extensive than they really are, because of indentation changes resulting from an attempt to avoid writing to other parts of the usb_device structure after it has been initialized. Similar changes should be made to the code that reads the BOS descriptor, but that can be handled in a separate patch later on. This patch is sufficient to fix the bug found by syzbot.
CVSS Details
- CVSS 3.1 Base Score: 6.4
- CVSS 3.1 Vector: (CVSS:3.1/AV:P/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Amazon Linux Ami 2 | — | Upgrade kernel-develUpgrade kernel-tools-debuginfoUpgrade bpftoolUpgrade kernel-tools-develUpgrade perf-debuginfoUpgrade kernel-debuginfoUpgrade kernelUpgrade kernel-livepatch-5.15.133-86.144Upgrade kernel-debuginfo-common-aarch64Upgrade perfUpgrade kernel-headersUpgrade python-perfUpgrade python-perf-debuginfoUpgrade kernel-livepatch-5.10.196-185.743Upgrade kernel-toolsUpgrade kernel-debuginfo-common-x86_64Upgrade bpftool-debuginfo | May 20, 2026 | May 20, 2026 |
| Amazon_linux_2023 | — | Upgrade kernel-develUpgrade kernel-tools-debuginfoUpgrade kernel-libbpfUpgrade bpftoolUpgrade kernel-livepatch-6.1.55-75.123Upgrade kernel-debuginfo-common-aarch64Upgrade perf-debuginfoUpgrade kernel-tools-develUpgrade kernel-toolsUpgrade python3-perfUpgrade python3-perf-debuginfoUpgrade perfUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-debuginfoUpgrade kernel-libbpf-develUpgrade kernel-libbpf-staticUpgrade bpftool-debuginfoUpgrade kernel-headersUpgrade kernel | Oct 16, 2025 | Jul 16, 2024 |
| Debian | — | Upgrade linux | Jul 30, 2024 | Jul 30, 2024 |
| Redhat_linux | — | No solution exists | Jul 9, 2025 | Jul 16, 2024 |
| Suse | — | Upgrade ocfs2-kmp-azureUpgrade dlm-kmp-defaultUpgrade dtb-armUpgrade kernel-docs-htmlUpgrade kernel-rt-optionalUpgrade kernel-debug-develUpgrade kernel-docsUpgrade dtb-hisiliconUpgrade kernel-rt_debug-vdsoUpgrade dtb-amlogicUpgrade dtb-appleUpgrade kernel-kvmsmall-vdsoUpgrade kselftests-kmp-defaultUpgrade kernel-azure-vdsoUpgrade kernel-default-livepatch-develUpgrade kernel-rt-vdsoUpgrade kernel-debugUpgrade kernel-defaultUpgrade kernel-source-rtUpgrade kernel-kvmsmall-livepatch-develUpgrade kernel-azure-extraUpgrade cluster-md-kmp-64kbUpgrade dtb-sprdUpgrade kernel-rt-livepatch-develUpgrade reiserfs-kmp-rtUpgrade kernel-debug-livepatch-develUpgrade dlm-kmp-rtUpgrade dtb-nvidiaUpgrade reiserfs-kmp-defaultUpgrade dtb-socionextUpgrade kernel-symsUpgrade ocfs2-kmp-64kbUpgrade kernel-64kb-optionalUpgrade reiserfs-kmp-64kbUpgrade dtb-amdUpgrade kernel-rt-extraUpgrade cluster-md-kmp-defaultUpgrade dtb-broadcomUpgrade dlm-kmp-azureUpgrade dtb-marvellUpgrade kernel-default-baseUpgrade kernel-syms-rtUpgrade gfs2-kmp-defaultUpgrade kernel-64kb-extraUpgrade kernel-debug-vdsoUpgrade dtb-renesasUpgrade kselftests-kmp-rtUpgrade kernel-rt_debugUpgrade kernel-rt_debug-livepatch-develUpgrade kernel-obs-qaUpgrade dtb-exynosUpgrade dtb-caviumUpgrade kernel-rtUpgrade dtb-xilinxUpgrade kselftests-kmp-64kbUpgrade kernel-zfcpdumpUpgrade kernel-default-vdsoUpgrade kernel-64kb-develUpgrade kernel-rt-develUpgrade kernel-azure-livepatch-develUpgrade dtb-qcomUpgrade dtb-allwinnerUpgrade gfs2-kmp-rtUpgrade kernel-macrosUpgrade kernel-obs-buildUpgrade kernel-kvmsmall-develUpgrade kernel-64kb-livepatch-develUpgrade kernel-rt_debug-develUpgrade cluster-md-kmp-azureUpgrade kernel-default-base-rebuildUpgrade kernel-azure-optionalUpgrade kernel-azureUpgrade kernel-rt-livepatchUpgrade kernel-default-extraUpgrade kernel-source-vanillaUpgrade cluster-md-kmp-rtUpgrade dtb-amazonUpgrade kernel-default-livepatchUpgrade kernel-default-develUpgrade dtb-mediatekUpgrade kernel-azure-develUpgrade kernel-syms-azureUpgrade kernel-sourceUpgrade kernel-default-optionalUpgrade dtb-alteraUpgrade kernel-kvmsmallUpgrade kernel-64kbUpgrade dtb-lgUpgrade dtb-freescaleUpgrade dlm-kmp-64kbUpgrade kselftests-kmp-azureUpgrade kernel-source-azureUpgrade kernel-devel-rtUpgrade kernel-develUpgrade dtb-rockchipUpgrade dtb-apmUpgrade ocfs2-kmp-rtUpgrade gfs2-kmp-64kbUpgrade gfs2-kmp-azureUpgrade reiserfs-kmp-azureUpgrade ocfs2-kmp-defaultUpgrade kernel-devel-azure | Aug 15, 2024 | Jul 16, 2024 |
| Ubuntu | — | Upgrade linux-nvidia-tegra-igxUpgrade linux-gcp-fipsUpgrade linux-azure-5.15Upgrade linux-xilinx-zynqmpUpgrade linux-kvmUpgrade linux-aws-fipsUpgrade linux-gkeopUpgrade linux-gkeUpgrade linux-oracle-5.15Upgrade linux-ibm-5.15Upgrade linuxUpgrade linux-lowlatencyUpgrade linux-intel-iotg-5.15Upgrade linux-azure-5.4Upgrade linux-gcp-5.4Upgrade linux-azure-fipsUpgrade linux-aws-5.4Upgrade linux-gkeop-5.15Upgrade linux-nvidiaUpgrade linux-oracleUpgrade linux-hwe-5.4Upgrade linux-riscv-5.15Upgrade linux-ibmUpgrade linux-ibm-5.4Upgrade linux-fipsUpgrade linux-intel-iotgUpgrade linux-gcp-5.15Upgrade linux-awsUpgrade linux-gcpUpgrade linux-raspi-5.4Upgrade linux-azureUpgrade linux-realtimeUpgrade linux-nvidia-tegraUpgrade linux-nvidia-tegra-5.15Upgrade linux-iotUpgrade linux-aws-5.15Upgrade linux-lowlatency-hwe-5.15Upgrade linux-bluefieldUpgrade linux-hwe-5.15Upgrade linux-raspiUpgrade linux-intel-iot-realtimeUpgrade linux-oracle-5.4Upgrade linux-azure-fde | Nov 19, 2024 | Jul 16, 2024 |
Prioritise with Active Threat Intelligence
With curated Threat Intelligence, you can see which vulnerabilities truly put you at risk, prioritize what matters most, and act before attackers do.
Explore Intelligence Hub