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-develUpgrade kernel-livepatch-5.10.93-87.444Upgrade python-perfUpgrade kernel-toolsUpgrade kernelUpgrade bpftool-debuginfoUpgrade bpftoolUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-tools-debuginfoUpgrade perf-debuginfoUpgrade kernel-headersUpgrade python-perf-debuginfoUpgrade kernel-debuginfo-common-aarch64Upgrade kernel-tools-develUpgrade kernel-debuginfoUpgrade perf | Feb 3, 2025 | May 24, 2024 |
| Debian | — | Upgrade linux | Jul 30, 2024 | May 24, 2024 |
| Redhat_linux | — | No solution existsUpgrade kernel-rtUpgrade kernel | Dec 5, 2024 | May 24, 2024 |
| Suse | — | Upgrade kernel-rtUpgrade kernel-64kb-livepatch-develUpgrade kernel-preemptUpgrade kernel-symsUpgrade kernel-source-azureUpgrade kernel-syms-azureUpgrade dtb-alteraUpgrade kernel-azure-optionalUpgrade dtb-sprdUpgrade dtb-caviumUpgrade dtb-nvidiaUpgrade kernel-debugUpgrade kernel-rt_debug-livepatch-develUpgrade ocfs2-kmp-azureUpgrade gfs2-kmp-64kbUpgrade reiserfs-kmp-azureUpgrade gfs2-kmp-defaultUpgrade kernel-devel-azureUpgrade kernel-kvmsmall-develUpgrade kernel-devel-rtUpgrade dtb-hisiliconUpgrade dtb-mediatekUpgrade gfs2-kmp-azureUpgrade kernel-default-optionalUpgrade kernel-64kb-extraUpgrade kernel-default-vdsoUpgrade kernel-source-vanillaUpgrade kernel-preempt-develUpgrade dtb-lgUpgrade kernel-develUpgrade dlm-kmp-64kbUpgrade ocfs2-kmp-defaultUpgrade kernel-rt-livepatchUpgrade dtb-armUpgrade kernel-sourceUpgrade dtb-exynosUpgrade dtb-allwinnerUpgrade kernel-default-base-rebuildUpgrade cluster-md-kmp-64kbUpgrade cluster-md-kmp-azureUpgrade dtb-renesasUpgrade dtb-xilinxUpgrade kernel-rt-develUpgrade kernel-rt_debug-develUpgrade kernel-64kb-develUpgrade dtb-rockchipUpgrade reiserfs-kmp-defaultUpgrade cluster-md-kmp-rtUpgrade dtb-qcomUpgrade kselftests-kmp-64kbUpgrade dlm-kmp-azureUpgrade kernel-kvmsmallUpgrade kernel-default-livepatch-develUpgrade ocfs2-kmp-rtUpgrade kernel-defaultUpgrade dtb-apmUpgrade kernel-rt_debug-vdsoUpgrade kselftests-kmp-rtUpgrade kselftests-kmp-defaultUpgrade kernel-azure-extraUpgrade dtb-broadcomUpgrade cluster-md-kmp-defaultUpgrade kernel-azure-vdsoUpgrade kernel-azure-develUpgrade kernel-debug-livepatch-develUpgrade dtb-freescaleUpgrade dtb-socionextUpgrade kernel-docsUpgrade kernel-rt_debugUpgrade ocfs2-kmp-64kbUpgrade kernel-obs-buildUpgrade kernel-64kbUpgrade kernel-default-baseUpgrade gfs2-kmp-rtUpgrade kernel-default-develUpgrade kernel-macrosUpgrade kernel-kvmsmall-vdsoUpgrade dlm-kmp-defaultUpgrade kernel-source-rtUpgrade kernel-debug-develUpgrade kernel-azureUpgrade reiserfs-kmp-rtUpgrade kernel-azure-livepatch-develUpgrade dtb-amdUpgrade reiserfs-kmp-64kbUpgrade dtb-amazonUpgrade kernel-rt-vdsoUpgrade kernel-64kb-optionalUpgrade dtb-appleUpgrade kernel-debug-vdsoUpgrade dtb-marvellUpgrade kernel-default-extraUpgrade dtb-amlogicUpgrade dlm-kmp-rtUpgrade kselftests-kmp-azureUpgrade kernel-zfcpdumpUpgrade kernel-rt-optionalUpgrade kernel-rt-livepatch-develUpgrade kernel-obs-qaUpgrade kernel-syms-rtUpgrade kernel-rt-extraUpgrade kernel-default-livepatchUpgrade kernel-kvmsmall-livepatch-develUpgrade kernel-docs-html | Aug 9, 2024 | May 24, 2024 |
| Ubuntu | — | Upgrade linux-aws-5.4Upgrade linux-bluefieldUpgrade linux-raspiUpgrade linux-raspi-5.4Upgrade linuxUpgrade linux-ibm-5.4Upgrade linux-oracle-5.4Upgrade linux-awsUpgrade linux-aws-fipsUpgrade linux-oracleUpgrade linux-ibmUpgrade linux-gkeopUpgrade linux-gcp-fipsUpgrade linux-kvmUpgrade linux-azure-fipsUpgrade linux-fipsUpgrade linux-gcpUpgrade linux-gcp-5.4Upgrade linux-azureUpgrade linux-azure-5.4Upgrade linux-hwe-5.4 | 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