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