In the Linux kernel, the following vulnerability has been resolved:
usb: gadget: f_fs: Fix race between aio_cancel() and AIO request complete
FFS based applications can utilize the aio_cancel() callback to dequeue pending USB requests submitted to the UDC. There is a scenario where the FFS application issues an AIO cancel call, while the UDC is handling a soft disconnect. For a DWC3 based implementation, the callstack looks like the following:
DWC3 Gadget FFS Application dwc3_gadget_soft_disconnect() ... --> dwc3_stop_active_transfers() --> dwc3_gadget_giveback(-ESHUTDOWN) --> ffs_epfile_async_io_complete() ffs_aio_cancel() --> usb_ep_free_request() --> usb_ep_dequeue()
There is currently no locking implemented between the AIO completion handler and AIO cancel, so the issue occurs if the completion routine is running in parallel to an AIO cancel call coming from the FFS application. As the completion call frees the USB request (io_data->req) the FFS application is also referencing it for the usb_ep_dequeue() call. This can lead to accessing a stale/hanging pointer.
commit b566d38857fc ("usb: gadget: f_fs: use io_data->status consistently") relocated the usb_ep_free_request() into ffs_epfile_async_io_complete(). However, in order to properly implement locking to mitigate this issue, the spinlock can't be added to ffs_epfile_async_io_complete(), as usb_ep_dequeue() (if successfully dequeuing a USB request) will call the function driver's completion handler in the same context. Hence, leading into a deadlock.
Fix this issue by moving the usb_ep_free_request() back to ffs_user_copy_worker(), and ensuring that it explicitly sets io_data->req to NULL after freeing it within the ffs->eps_lock. This resolves the race condition above, as the ffs_aio_cancel() routine will not continue attempting to dequeue a request that has already been freed, or the ffs_user_copy_work() not freeing the USB request until the AIO cancel is done referencing it.
This fix depends on commit b566d38857fc ("usb: gadget: f_fs: use io_data->status consistently")
CVSS Details
- CVSS 3.1 Base Score: 7.8
- CVSS 3.1 Vector: (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Debian | — | Upgrade linuxUpgrade linux-6.1 | Jul 17, 2024 | May 30, 2024 |
| Oracle_linux | — | Upgrade kernel-uek | Oct 16, 2024 | May 30, 2024 |
| Suse | — | Upgrade reiserfs-kmp-64kbUpgrade dtb-broadcomUpgrade ocfs2-kmp-azureUpgrade gfs2-kmp-rtUpgrade dtb-amlogicUpgrade kernel-macrosUpgrade kselftests-kmp-64kbUpgrade dtb-amazonUpgrade kernel-source-azureUpgrade kernel-symsUpgrade kernel-default-develUpgrade kernel-kvmsmall-livepatch-develUpgrade kernel-debug-livepatch-develUpgrade kernel-azure-extraUpgrade kernel-debug-develUpgrade kernel-kvmsmallUpgrade dtb-renesasUpgrade kernel-azure-livepatch-develUpgrade kernel-azure-optionalUpgrade kernel-rt_debugUpgrade kernel-zfcpdumpUpgrade kernel-syms-azureUpgrade dtb-amdUpgrade kernel-64kb-optionalUpgrade kernel-64kb-develUpgrade kernel-default-livepatchUpgrade cluster-md-kmp-rtUpgrade ocfs2-kmp-64kbUpgrade dtb-hisiliconUpgrade dtb-exynosUpgrade kernel-kvmsmall-develUpgrade kernel-default-optionalUpgrade kernel-docs-htmlUpgrade kernel-syms-rtUpgrade dtb-alteraUpgrade kernel-azure-baseUpgrade kernel-default-vdsoUpgrade kernel-rt_debug-develUpgrade kernel-develUpgrade kernel-devel-azureUpgrade cluster-md-kmp-azureUpgrade dtb-appleUpgrade ocfs2-kmp-rtUpgrade kernel-default-extraUpgrade kernel-devel-rtUpgrade dtb-socionextUpgrade dtb-freescaleUpgrade dtb-lgUpgrade dtb-apmUpgrade kernel-sourceUpgrade cluster-md-kmp-defaultUpgrade dtb-marvellUpgrade dlm-kmp-64kbUpgrade reiserfs-kmp-defaultUpgrade dtb-xilinxUpgrade gfs2-kmp-64kbUpgrade kernel-rt_debug-vdsoUpgrade kernel-debugUpgrade kernel-obs-qaUpgrade kernel-64kbUpgrade kernel-64kb-livepatch-develUpgrade kernel-default-base-rebuildUpgrade gfs2-kmp-defaultUpgrade kernel-rt-extraUpgrade kernel-kvmsmall-vdsoUpgrade kernel-rtUpgrade kernel-default-manUpgrade kernel-defaultUpgrade kernel-azure-vdsoUpgrade ocfs2-kmp-defaultUpgrade reiserfs-kmp-azureUpgrade kernel-rt-vdsoUpgrade kernel-obs-buildUpgrade kernel-preempt-develUpgrade kernel-default-baseUpgrade dtb-sprdUpgrade dtb-nvidiaUpgrade dtb-rockchipUpgrade kernel-default-livepatch-develUpgrade reiserfs-kmp-rtUpgrade cluster-md-kmp-64kbUpgrade kselftests-kmp-azureUpgrade kselftests-kmp-rtUpgrade kselftests-kmp-defaultUpgrade kernel-source-vanillaUpgrade kernel-preemptUpgrade kernel-docsUpgrade kernel-azure-develUpgrade kernel-64kb-extraUpgrade gfs2-kmp-azureUpgrade dtb-mediatekUpgrade kernel-rt-develUpgrade dtb-armUpgrade dtb-allwinnerUpgrade dlm-kmp-azureUpgrade dtb-qcomUpgrade kernel-azureUpgrade kernel-rt_debug-livepatch-develUpgrade dtb-caviumUpgrade kernel-rt-optionalUpgrade kernel-rt-livepatchUpgrade kernel-source-rtUpgrade kernel-debug-vdsoUpgrade dlm-kmp-defaultUpgrade dlm-kmp-rtUpgrade kernel-rt-livepatch-devel | Jun 24, 2024 | May 30, 2024 |
| Ubuntu | — | Upgrade linux-image-oemUpgrade linux-image-nvidiaUpgrade linux-image-lowlatency-hwe-20.04Upgrade linux-image-gkeop-5.4Upgrade linux-image-lowlatency-64kUpgrade linux-image-azure-lts-22.04Upgrade linux-image-gkeopUpgrade linux-image-5.15.0-1052-gkeopUpgrade linux-image-5.4.0-195-genericUpgrade linux-image-ibm-lts-20.04Upgrade linux-image-6.8.0-1012-gcpUpgrade linux-image-6.8.0-1012-azure-fdeUpgrade linux-image-generic-lpaeUpgrade linux-image-5.15.0-1066-kvmUpgrade linux-image-6.8.0-40-lowlatency-64kUpgrade linux-image-5.4.0-1099-gkeopUpgrade linux-image-6.8.0-1013-awsUpgrade linux-image-aws-lts-20.04Upgrade linux-image-oem-24.04Upgrade linux-image-gcp-lts-22.04Upgrade linux-image-raspi2-hwe-18.04Upgrade linux-image-genericUpgrade linux-image-azure-fde-lts-22.04Upgrade linux-image-5.4.0-1079-ibmUpgrade linux-image-azure-lts-20.04Upgrade linux-image-5.15.0-1072-azure-fdeUpgrade linux-image-5.4.0-1132-awsUpgrade linux-image-snapdragon-hwe-18.04Upgrade linux-image-5.15.0-121-generic-64kUpgrade linux-image-generic-64k-hwe-20.04Upgrade linux-image-5.15.0-1069-awsUpgrade linux-image-6.8.0-40-generic-64kUpgrade linux-image-6.8.0-1010-ibmUpgrade linux-image-ibm-classicUpgrade linux-image-azureUpgrade linux-image-raspi2Upgrade linux-image-5.15.0-1068-gcpUpgrade linux-image-gke-5.15Upgrade linux-image-5.4.0-1043-iotUpgrade linux-image-oem-20.04cUpgrade linux-image-xilinx-zynqmpUpgrade linux-image-oem-20.04bUpgrade linux-image-lowlatencyUpgrade linux-image-6.8.0-40-lowlatencyUpgrade linux-image-5.15.0-1072-azureUpgrade linux-image-5.15.0-121-lowlatencyUpgrade linux-image-5.4.0-1116-raspiUpgrade linux-image-intelUpgrade linux-image-5.4.0-1051-xilinx-zynqmpUpgrade linux-image-raspiUpgrade linux-image-5.15.0-1064-intel-iotgUpgrade linux-image-gkeUpgrade linux-image-5.15.0-1062-ibmUpgrade linux-image-generic-64kUpgrade linux-image-aws-lts-22.04Upgrade linux-image-ibmUpgrade linux-image-oem-osp1Upgrade linux-image-5.15.0-121-genericUpgrade linux-image-virtual-hwe-24.04Upgrade linux-image-oracle-lts-20.04Upgrade linux-image-intel-iotgUpgrade linux-image-6.8.0-1010-oemUpgrade linux-image-5.15.0-1062-raspiUpgrade linux-image-lowlatency-hwe-18.04Upgrade linux-image-6.8.0-40-genericUpgrade linux-image-nvidia-lowlatencyUpgrade linux-image-nvidia-64kUpgrade linux-image-raspi-hwe-18.04Upgrade linux-image-5.4.0-195-generic-lpaeUpgrade linux-image-6.8.0-1011-nvidiaUpgrade linux-image-6.8.0-1010-oracle-64kUpgrade linux-image-5.4.0-195-lowlatencyUpgrade linux-image-bluefieldUpgrade linux-image-gcp-lts-20.04Upgrade linux-image-oracle-64kUpgrade linux-image-nvidia-6.8Upgrade linux-image-5.4.0-1131-oracleUpgrade linux-image-lowlatency-64k-hwe-20.04Upgrade linux-image-virtual-hwe-20.04Upgrade linux-image-5.15.0-121-generic-lpaeUpgrade linux-image-5.4.0-1137-azureUpgrade linux-image-generic-hwe-20.04Upgrade linux-image-6.8.0-1012-azureUpgrade linux-image-6.8.0-1011-nvidia-lowlatencyUpgrade linux-image-5.4.0-1092-bluefieldUpgrade linux-image-awsUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-kvmUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-gkeop-5.15Upgrade linux-image-5.4.0-1136-gcpUpgrade linux-image-6.8.0-1011-nvidia-lowlatency-64kUpgrade linux-image-5.15.0-1067-oracleUpgrade linux-image-5.4.0-1120-kvmUpgrade linux-image-6.8.0-1011-nvidia-64kUpgrade linux-image-virtual-hwe-18.04Upgrade linux-image-oracleUpgrade linux-image-generic-lpae-hwe-20.04Upgrade linux-image-oem-20.04Upgrade linux-image-azure-fdeUpgrade linux-image-oracle-lts-22.04Upgrade linux-image-5.15.0-1064-nvidiaUpgrade linux-image-virtualUpgrade linux-image-6.8.0-1009-raspiUpgrade linux-image-5.15.0-121-lowlatency-64kUpgrade linux-image-6.8.0-1010-oracleUpgrade linux-image-5.15.0-1035-xilinx-zynqmpUpgrade linux-image-oem-24.04aUpgrade linux-image-5.15.0-1064-nvidia-lowlatencyUpgrade linux-image-nvidia-lowlatency-64kUpgrade linux-image-gcpUpgrade linux-image-nvidia-64k-6.8Upgrade linux-image-oem-20.04dUpgrade linux-image-5.15.0-1066-gkeUpgrade linux-image-6.8.0-1008-gkeUpgrade linux-image-raspi-nolpaeUpgrade linux-image-azure-cvmUpgrade linux-image-generic-hwe-18.04 | Aug 9, 2024 | May 30, 2024 |
| Vmware Photon_os | — | Use 'tdnf update' to upgrade all packages to the latest version. | Jan 20, 2025 | May 30, 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