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-tools-debuginfoUpgrade kernel-tools-develUpgrade bpftoolUpgrade kernel-develUpgrade kernel-debuginfoUpgrade kernel-debuginfo-common-aarch64Upgrade perfUpgrade perf-debuginfoUpgrade kernelUpgrade kernel-headersUpgrade kernel-livepatch-5.15.133-86.144Upgrade bpftool-debuginfoUpgrade python-perf-debuginfoUpgrade kernel-toolsUpgrade python-perfUpgrade kernel-livepatch-5.10.196-185.743Upgrade kernel-debuginfo-common-x86_64 | May 20, 2026 | May 20, 2026 |
| Amazon_linux_2023 | — | Upgrade kernel-tools-debuginfoUpgrade python3-perfUpgrade kernel-libbpfUpgrade kernel-develUpgrade perf-debuginfoUpgrade perfUpgrade kernel-livepatch-6.1.55-75.123Upgrade bpftoolUpgrade kernel-tools-develUpgrade kernel-debuginfo-common-aarch64Upgrade kernel-toolsUpgrade python3-perf-debuginfoUpgrade kernel-debuginfoUpgrade kernel-libbpf-staticUpgrade kernelUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-libbpf-develUpgrade kernel-headersUpgrade bpftool-debuginfo | 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 kernel-default-base-rebuildUpgrade kselftests-kmp-64kbUpgrade cluster-md-kmp-azureUpgrade dtb-qcomUpgrade kernel-zfcpdumpUpgrade kernel-azure-livepatch-develUpgrade kernel-azureUpgrade kernel-default-vdsoUpgrade kernel-rtUpgrade kernel-azure-optionalUpgrade dtb-caviumUpgrade dtb-xilinxUpgrade dlm-kmp-64kbUpgrade kernel-64kbUpgrade kernel-64kb-develUpgrade dtb-lgUpgrade kernel-rt_debug-develUpgrade kernel-obs-qaUpgrade kernel-kvmsmall-develUpgrade kernel-64kb-livepatch-develUpgrade dtb-amazonUpgrade kernel-macrosUpgrade ocfs2-kmp-defaultUpgrade kernel-default-livepatchUpgrade cluster-md-kmp-rtUpgrade kernel-obs-buildUpgrade gfs2-kmp-64kbUpgrade gfs2-kmp-azureUpgrade reiserfs-kmp-azureUpgrade kernel-rt-develUpgrade dtb-exynosUpgrade dtb-rockchipUpgrade kernel-develUpgrade kernel-devel-rtUpgrade kernel-rt-livepatchUpgrade kernel-source-vanillaUpgrade gfs2-kmp-rtUpgrade kernel-default-extraUpgrade kselftests-kmp-azureUpgrade ocfs2-kmp-rtUpgrade dtb-allwinnerUpgrade dtb-apmUpgrade kernel-devel-azureUpgrade kernel-syms-azureUpgrade dtb-freescaleUpgrade dtb-mediatekUpgrade kernel-azure-develUpgrade dtb-alteraUpgrade kernel-default-develUpgrade kernel-source-azureUpgrade kernel-kvmsmallUpgrade kernel-default-optionalUpgrade kernel-sourceUpgrade dtb-amlogicUpgrade kernel-default-baseUpgrade dtb-renesasUpgrade dtb-hisiliconUpgrade kernel-64kb-extraUpgrade dlm-kmp-azureUpgrade kernel-64kb-optionalUpgrade gfs2-kmp-defaultUpgrade cluster-md-kmp-defaultUpgrade dtb-amdUpgrade kernel-syms-rtUpgrade kernel-rt-extraUpgrade dtb-broadcomUpgrade kernel-debug-vdsoUpgrade ocfs2-kmp-azureUpgrade kernel-defaultUpgrade kernel-debug-develUpgrade kernel-debugUpgrade dlm-kmp-defaultUpgrade kernel-rt-optionalUpgrade kernel-kvmsmall-vdsoUpgrade kernel-source-rtUpgrade kernel-docs-htmlUpgrade dtb-socionextUpgrade dlm-kmp-rtUpgrade reiserfs-kmp-rtUpgrade kernel-rt-livepatch-develUpgrade kernel-debug-livepatch-develUpgrade kselftests-kmp-defaultUpgrade kernel-rt_debug-vdsoUpgrade kernel-rt-vdsoUpgrade kernel-docsUpgrade kernel-default-livepatch-develUpgrade kernel-azure-vdsoUpgrade dtb-appleUpgrade kernel-rt_debug-livepatch-develUpgrade kselftests-kmp-rtUpgrade kernel-rt_debugUpgrade reiserfs-kmp-64kbUpgrade kernel-azure-extraUpgrade dtb-sprdUpgrade cluster-md-kmp-64kbUpgrade kernel-kvmsmall-livepatch-develUpgrade dtb-marvellUpgrade reiserfs-kmp-defaultUpgrade ocfs2-kmp-64kbUpgrade kernel-symsUpgrade dtb-nvidiaUpgrade dtb-arm | Aug 15, 2024 | Jul 16, 2024 |
| Ubuntu | — | Upgrade linux-ibm-5.15Upgrade linux-gkeUpgrade linux-hwe-5.4Upgrade linux-nvidiaUpgrade linux-intel-iotgUpgrade linux-oracle-5.15Upgrade linux-riscv-5.15Upgrade linux-nvidia-tegra-igxUpgrade linux-gcp-fipsUpgrade linux-gcp-5.15Upgrade linux-gkeop-5.15Upgrade linux-azure-5.4Upgrade linux-aws-fipsUpgrade linux-gkeopUpgrade linux-gcp-5.4Upgrade linux-fipsUpgrade linux-kvmUpgrade linux-intel-iotg-5.15Upgrade linux-aws-5.4Upgrade linux-ibmUpgrade linux-azure-5.15Upgrade linux-xilinx-zynqmpUpgrade linux-oracleUpgrade linux-lowlatencyUpgrade linux-azure-fipsUpgrade linuxUpgrade linux-ibm-5.4Upgrade linux-raspiUpgrade linux-lowlatency-hwe-5.15Upgrade linux-hwe-5.15Upgrade linux-bluefieldUpgrade linux-realtimeUpgrade linux-iotUpgrade linux-azure-fdeUpgrade linux-raspi-5.4Upgrade linux-nvidia-tegra-5.15Upgrade linux-nvidia-tegraUpgrade linux-aws-5.15Upgrade linux-azureUpgrade linux-awsUpgrade linux-intel-iot-realtimeUpgrade linux-gcpUpgrade linux-oracle-5.4 | 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