CVE-2021-47505·Kernel vulnerability
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 <ramjiyani@google.com> (https://lore.kernel.org/r/20211027011834.2497484-1-ramjiyani@google.com) 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.
- Severity
- high
- Software
- Kernel
- Fixed in
- 5.15.8
- Published
- 2024-05-24
Affected versions
From: 5.11
Until: 5.15.8
Fixed in: 5.15.8
How to fix this CVE
Update your Linux kernel to version 5.15.8 or later to resolve this use-after-free vulnerability in the asynchronous I/O (aio) subsystem. The vulnerability affects kernel versions 5.11 through 5.15.7 when polling signalfd or binder file descriptors using aio poll operations. Apply the kernel update through your distribution's package manager and reboot the system to activate the patched kernel.
sudo dnf update kernel kernel-devel && sudo rebootDefensia detects this vulnerability
How to check if you are affected
- Step 1: Check current kernel version with `uname -r` and compare against 5.11-5.15.7 range
- Step 2: Verify if aio functionality is in use by checking for aio-related syscalls in application logs or by running `strace -e trace=io_* <process_name>`
- Step 3: Search system logs for kernel panic or oops messages related to aio_poll operations using `sudo grep -i 'aio_poll\|use-after-free' /var/log/kern.log* /var/log/messages* 2>/dev/null`
- Step 4: After patching, confirm kernel version with `uname -r` shows 5.15.8 or higher
FAQ
What is CVE-2021-47505?
CVE-2021-47505 is a use-after-free vulnerability in the Linux kernel's aio poll handler that occurs when asynchronous I/O polls are used on special file descriptors (signalfd or binder) whose waitqueues have limited lifetimes. The vulnerability arises because aio poll does not properly handle POLLFREE notifications that signal waitqueue destruction, leading to potential memory corruption.
Is CVE-2021-47505 being actively exploited?
No, CVE-2021-47505 is not listed in CISA's Known Exploited Vulnerabilities catalog and no public exploits are currently available. However, it remains a high-severity memory safety issue that should be patched promptly.
What versions of Kernel are affected by CVE-2021-47505?
Linux kernel versions from 5.11 through 5.15.7 are vulnerable. The fix was released in kernel 5.15.8.
How do I check if my server is vulnerable to CVE-2021-47505?
Run `uname -r` to display your kernel version. If the output shows a version between 5.11 and 5.15.7 (inclusive), your system is vulnerable and requires an immediate kernel update.
Does Defensia detect CVE-2021-47505?
Yes — Defensia's CVE advisory scanner compares installed package versions against the NVD database. If Kernel is installed on a monitored server, CVE-2021-47505 will appear in your dashboard with remediation steps.
Related Kernel CVEs
References
- https://git.kernel.org/stable/c/321fba81ec034f88aea4898993c1bf15605c023f
- https://git.kernel.org/stable/c/4105e6a128e8a98455dfc9e6dbb2ab0c33c4497f
- https://git.kernel.org/stable/c/47ffefd88abfffe8a040bcc1dd0554d4ea6f7689
- https://git.kernel.org/stable/c/50252e4b5e989ce64555c7aef7516bdefc2fea72
- https://git.kernel.org/stable/c/60d311f9e6381d779d7d53371f87285698ecee24
Track CVEs across your fleet automatically
Defensia scans your Linux servers and tells you exactly which ones are running vulnerable versions — including CVE-2021-47505. Free for 1 server.
Get started free