In the Linux kernel, the following vulnerability has been resolved:
aio: fix use-after-free due to missing POLLFREE handling
signalfd_poll() and binder_poll() are special in that they use a waitqueue whose lifetime is the current task, rather than the struct file as is normally the case. This is okay for blocking polls, since a blocking poll occurs within one task; however, non-blocking polls require another solution. This solution is for the queue to be cleared before it is freed, by sending a POLLFREE notification to all waiters.
Unfortunately, only eventpoll handles POLLFREE. A second type of non-blocking poll, aio poll, was added in kernel v4.18, and it doesn't handle POLLFREE. This allows a use-after-free to occur if a signalfd or binder fd is polled with aio poll, and the waitqueue gets freed.
Fix this by making aio poll handle POLLFREE.
A patch by Ramji Jiyani <[email protected]> (https://lore.kernel.org/r/[email protected]) tried to do this by making aio_poll_wake() always complete the request inline if POLLFREE is seen. However, that solution had two bugs. First, it introduced a deadlock, as it unconditionally locked the aio context while holding the waitqueue lock, which inverts the normal locking order. Second, it didn't consider that POLLFREE notifications are missed while the request has been temporarily de-queued.
The second problem was solved by my previous patch. This patch then properly fixes the use-after-free by handling POLLFREE in a deadlock-free way. It does this by taking advantage of the fact that freeing of the waitqueue is RCU-delayed, similar to what eventpoll does.
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 |
|---|---|---|---|---|
| Amazon Linux Ami 2 | — | Upgrade kernel-tools-debuginfoUpgrade kernel-debuginfo-common-x86_64Upgrade bpftoolUpgrade bpftool-debuginfoUpgrade kernel-develUpgrade kernel-livepatch-5.10.93-87.444Upgrade python-perfUpgrade kernel-toolsUpgrade kernelUpgrade kernel-tools-develUpgrade kernel-headersUpgrade kernel-debuginfo-common-aarch64Upgrade python-perf-debuginfoUpgrade kernel-debuginfoUpgrade perf-debuginfoUpgrade perf | Feb 3, 2025 | May 24, 2024 |
| Debian | — | Upgrade linux | Jul 30, 2024 | May 24, 2024 |
| Redhat_linux | — | Upgrade kernelNo solution existsUpgrade kernel-rt | Dec 5, 2024 | May 24, 2024 |
| Suse | — | Upgrade dlm-kmp-azureUpgrade kernel-kvmsmall-vdsoUpgrade dtb-amdUpgrade kernel-azure-develUpgrade dtb-socionextUpgrade kernel-rt_debug-vdsoUpgrade ocfs2-kmp-64kbUpgrade dtb-apmUpgrade cluster-md-kmp-defaultUpgrade kernel-azure-livepatch-develUpgrade kernel-kvmsmall-livepatch-develUpgrade kernel-macrosUpgrade kernel-azure-vdsoUpgrade kernel-debug-develUpgrade kernel-azureUpgrade kernel-default-develUpgrade ocfs2-kmp-rtUpgrade reiserfs-kmp-rtUpgrade kernel-default-livepatch-develUpgrade reiserfs-kmp-64kbUpgrade kernel-default-livepatchUpgrade kernel-syms-rtUpgrade kernel-rt-vdsoUpgrade kernel-rt-extraUpgrade kernel-kvmsmallUpgrade dlm-kmp-defaultUpgrade kernel-azure-extraUpgrade dtb-amazonUpgrade kernel-source-rtUpgrade dtb-broadcomUpgrade kselftests-kmp-defaultUpgrade kselftests-kmp-rtUpgrade dlm-kmp-rtUpgrade kernel-rt-optionalUpgrade kernel-64kb-optionalUpgrade kernel-64kbUpgrade gfs2-kmp-rtUpgrade kernel-default-extraUpgrade dtb-marvellUpgrade kselftests-kmp-azureUpgrade kernel-defaultUpgrade kernel-docsUpgrade kernel-rt_debugUpgrade kernel-obs-buildUpgrade kernel-zfcpdumpUpgrade kernel-obs-qaUpgrade kernel-rt-livepatch-develUpgrade dtb-appleUpgrade kernel-docs-htmlUpgrade kernel-default-baseUpgrade kernel-debug-livepatch-develUpgrade dtb-freescaleUpgrade kernel-debug-vdsoUpgrade dtb-amlogicUpgrade dtb-allwinnerUpgrade kernel-rt_debug-develUpgrade kernel-preempt-develUpgrade dtb-renesasUpgrade kernel-rt-develUpgrade dtb-rockchipUpgrade dtb-alteraUpgrade dtb-xilinxUpgrade kernel-devel-rtUpgrade ocfs2-kmp-azureUpgrade kernel-preemptUpgrade kernel-symsUpgrade cluster-md-kmp-azureUpgrade kernel-develUpgrade dtb-armUpgrade kernel-64kb-develUpgrade dtb-exynosUpgrade dtb-sprdUpgrade gfs2-kmp-64kbUpgrade kernel-default-optionalUpgrade gfs2-kmp-defaultUpgrade dtb-mediatekUpgrade dtb-hisiliconUpgrade reiserfs-kmp-azureUpgrade gfs2-kmp-azureUpgrade dtb-caviumUpgrade dtb-nvidiaUpgrade kernel-rtUpgrade kernel-64kb-livepatch-develUpgrade dtb-qcomUpgrade kernel-64kb-extraUpgrade kselftests-kmp-64kbUpgrade kernel-syms-azureUpgrade kernel-default-vdsoUpgrade kernel-azure-optionalUpgrade cluster-md-kmp-rtUpgrade kernel-source-azureUpgrade kernel-rt-livepatchUpgrade kernel-kvmsmall-develUpgrade kernel-default-base-rebuildUpgrade cluster-md-kmp-64kbUpgrade kernel-sourceUpgrade kernel-devel-azureUpgrade kernel-debugUpgrade kernel-rt_debug-livepatch-develUpgrade dtb-lgUpgrade dlm-kmp-64kbUpgrade kernel-source-vanillaUpgrade reiserfs-kmp-defaultUpgrade ocfs2-kmp-default | Aug 9, 2024 | May 24, 2024 |
| Ubuntu | — | Upgrade linux-kvmUpgrade linux-gcp-5.4Upgrade linux-azureUpgrade linux-oracleUpgrade linux-azure-5.4Upgrade linux-ibmUpgrade linux-aws-fipsUpgrade linux-gcpUpgrade linux-gkeopUpgrade linux-hwe-5.4Upgrade linux-fipsUpgrade linux-azure-fipsUpgrade linux-gcp-fipsUpgrade linux-awsUpgrade linuxUpgrade linux-raspiUpgrade linux-raspi-5.4Upgrade linux-ibm-5.4Upgrade linux-oracle-5.4Upgrade linux-aws-5.4Upgrade linux-bluefield | Nov 19, 2024 | May 24, 2024 |
| Vmware Photon_os | — | Use 'tdnf update' to upgrade all packages to the latest version. | Jan 20, 2025 | May 24, 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