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