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