CVE-2021-47505 json
aio: fix use-after-free due to missing POLLFREE handling
published 2024-05-24 2 y ago modified 2026-08-05 3 mo ago also EUVD-2021-34509
- cvss
- 7.8
- version 3.1, CNA
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- 0.3%
- EPSS 0.3% chance of exploitation in 30 days, percentile 16%
- public exploits
- 0
- none known
Summary
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.
Patch / fix
- Linux Linux 4.19.221, 5.4.165, 5.10.85, 5.15.8, 5.16
- linux Debian 14, Debian 13, Debian 12 5.15.15-1
debian advisories DEBIAN-CVE-2021-47505
- linux Ubuntu 20.04 LTS 5.4.0-100.113
- linux-aws Ubuntu 20.04 LTS 5.4.0-1066.69
- linux-gcp Ubuntu 20.04 LTS 5.4.0-1065.69
- linux-ibm Ubuntu 20.04 LTS 5.4.0-1015.16
- linux-kvm Ubuntu 20.04 LTS 5.4.0-1056.58
- linux-azure Ubuntu 20.04 LTS 5.4.0-1070.73
- linux-gkeop Ubuntu 20.04 LTS 5.4.0-1034.35
- linux-raspi Ubuntu 20.04 LTS 5.4.0-1053.60
ubuntu advisories UBUNTU-CVE-2021-47505
Ubuntu security data © Canonical Ltd., from https://github.com/canonical/ubuntu-security-notices via OSV; changed: normalised to fixed package versions per release. CC BY-SA 4.0
- kernel RHEL 9 5.14.0-503.11.1.el9_5
- rv RHEL 9 5.14.0-503.11.1.el9_5
- perf RHEL 9 5.14.0-503.11.1.el9_5
- rtla RHEL 9 5.14.0-503.11.1.el9_5
- bpftool RHEL 9 7.4.0-503.11.1.el9_5
- libperf RHEL 9 5.14.0-503.11.1.el9_5
- kernel-rt RHEL 9 5.14.0-503.11.1.el9_5
- kernel-64k RHEL 9 5.14.0-503.11.1.el9_5
red hat advisories RHSA-2024:9315
- dtb-aarch64 openSUSE Leap 15.5 5.14.21-150500.55.68.1
- kernel-64kb SLE Module for Basesystem 15 SP5, openSUSE Leap 15.5 5.14.21-150500.55.68.1
- kernel-syms SLE Module for Development Tools 15 SP5, openSUSE Leap 15.5 5.14.21-150500.55.68.1
- kernel-obs-qa openSUSE Leap 15.5 5.14.21-150500.55.68.1
- kernel-source SLE Module for Development Tools 15 SP5, SLE Module for Basesystem 15 SP5, openSUSE Leap 15.5 5.14.21-150500.55.68.1
- kernel-default SLE Workstation Extension 15 SP5, SLE Module for Legacy 15 SP5, SLE Module for Basesystem 15 SP5 +4 more 5.14.21-150500.55.68.1
- kernel-kvmsmall openSUSE Leap 15.5 5.14.21-150500.55.68.1
- kernel-zfcpdump SLE Module for Basesystem 15 SP5, openSUSE Leap 15.5 5.14.21-150500.55.68.1
suse advisories SUSE-SU-2024:2190-1SUSE-SU-2024:2189-1SUSE-SU-2024:2185-1SUSE-SU-2024:2183-1SUSE-SU-2024:2019-1SUSE-SU-2024:2011-1
- git.kernel.org/stable/c/321fba81ec034f88aea4898993c1bf15605c023f commit
- git.kernel.org/stable/c/4105e6a128e8a98455dfc9e6dbb2ab0c33c4497f commit
- git.kernel.org/stable/c/47ffefd88abfffe8a040bcc1dd0554d4ea6f7689 commit
- git.kernel.org/stable/c/60d311f9e6381d779d7d53371f87285698ecee24 commit
- git.kernel.org/stable/c/50252e4b5e989ce64555c7aef7516bdefc2fea72 commit
Vendor advisories
What the vendors themselves say about their products: affected, fixed or not affected, and what to do.
red hat product security vex CVE-2021-47505 updated cvss 6.6
kernel: aio: fix use-after-free due to missing POLLFREE handling
-
Red Hat Enterprise Linux 7 perf, kernel, bpftool, kernel-rt, python-perf, kernel-kdump, +8 moreaffected: workaround, no fix planned “Out of support scope”
-
Red Hat CodeReady Linux Builder (v. 9) libperf 5.14.0-503.11.1.el9_5, kernel-debuginfo-common-s390x 5.14.0-503.11.1.el9_5, kernel-debuginfo-common-x86_64 5.14.0-503.11.1.el9_5, kernel-debuginfo-common-aarch64 5.14.0-503.11.1.el9_5, kernel-debuginfo-common-ppc64le 5.14.0-503.11.1.el9_5 Red Hat Enterprise Linux AppStream (v. 9) rv 5.14.0-503.11.1.el9_5, perf 5.14.0-503.11.1.el9_5, rtla 5.14.0-503.11.1.el9_5, kernel-devel-matched 5.14.0-503.11.1.el9_5, kernel-64k-devel-matched 5.14.0-503.11.1.el9_5, kernel-debug-devel-matched 5.14.0-503.11.1.el9_5, +6 more Red Hat Enterprise Linux BaseOS (v. 9) bpftool 7.4.0-503.11.1.el9_5, kernel 5.14.0-503.11.1.el9_5, kernel-64k 5.14.0-503.11.1.el9_5, kernel-core 5.14.0-503.11.1.el9_5, kernel-tools 5.14.0-503.11.1.el9_5, python3-perf 5.14.0-503.11.1.el9_5, +29 more Red Hat Enterprise Linux Real Time (v. 9) kernel-rt 5.14.0-503.11.1.el9_5, kernel-rt-core 5.14.0-503.11.1.el9_5, kernel-rt-modules 5.14.0-503.11.1.el9_5, kernel-rt-debug-core 5.14.0-503.11.1.el9_5, kernel-rt-modules-core 5.14.0-503.11.1.el9_5, kernel-rt-debug-modules 5.14.0-503.11.1.el9_5, +4 more Red Hat Enterprise Linux Real Time for NFV (v. 9) kernel-rt 5.14.0-503.11.1.el9_5, kernel-rt-kvm 5.14.0-503.11.1.el9_5, kernel-rt-core 5.14.0-503.11.1.el9_5, kernel-rt-modules 5.14.0-503.11.1.el9_5, kernel-rt-debug-kvm 5.14.0-503.11.1.el9_5, kernel-rt-debug-core 5.14.0-503.11.1.el9_5, +6 morefixed: vendor fix RHSA-2024:9315
-
Red Hat CodeReady Linux Builder (v. 9) kernel-cross-headers 5.14.0-503.11.1.el9_5 Red Hat Enterprise Linux 6 perf, kernel, python-perf, kernel-kdump, kernel-firmware, kernel-bootwrapper, +1 more Red Hat Enterprise Linux 8 perf, kernel, bpftool, kernel-rt, kernel-core, kernel-tools, +29 more Red Hat Enterprise Linux 9 kernel-rt, kernel-rt-kvm, kernel-rt-core, kernel-rt-modules, kernel-rt-debug-kvm, kernel-rt-debug-core, +12 more Red Hat Enterprise Linux AppStream (v. 9) kernel-headers 5.14.0-503.11.1.el9_5not affected: vulnerable code not present
Red Hat CSAF VEX © Red Hat, Inc., from https://security.access.redhat.com/data/csaf/v2/vex/; changed: reduced to product statuses and remediations. CC BY 4.0 · csaf
CISA SSVC
- Exploitation
- none
- Automatable
- no
- Technical impact
- partial
- Assessed
- 2 y ago
Exploit prediction
0.25% chance of exploitation in the next 30 days, higher than 16% of all scored CVEs (FIRST EPSS, 2026-11-08).
CVSS scores
| assigned by | version | score | vector |
|---|---|---|---|
| CNA | 3.1 | 7.8 | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| NVD | 3.1 | 7.8 | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
Affected products
- Linux Linux
Classification
- Weakness
-
- CWE-416 Use After Free
- Technology feeds
References
-
git.kernel.org
/stable/c/321fba81ec034f88aea4898993c1bf15605c023f
patch
-
git.kernel.org
/stable/c/4105e6a128e8a98455dfc9e6dbb2ab0c33c4497f
patch
-
git.kernel.org
/stable/c/47ffefd88abfffe8a040bcc1dd0554d4ea6f7689
patch
-
git.kernel.org
/stable/c/60d311f9e6381d779d7d53371f87285698ecee24
patch
-
git.kernel.org
/stable/c/50252e4b5e989ce64555c7aef7516bdefc2fea72
patch
Sources
- CVE List CVE-2021-47505
- NVD CVE-2021-47505
Fencer Vulns keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.