Lucene search

K
ubuntucveUbuntu.comUB:CVE-2021-47505
HistoryMay 24, 2024 - 12:00 a.m.

CVE-2021-47505

2024-05-2400:00:00
ubuntu.com
ubuntu.com
1
linux kernel
vulnerability
use-after-free
pollfree handling
aio poll
signalfd
binder fd
rcu-delayed

6.6 Medium

AI Score

Confidence

High

0.0004 Low

EPSS

Percentile

15.5%

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.

6.6 Medium

AI Score

Confidence

High

0.0004 Low

EPSS

Percentile

15.5%

Related for UB:CVE-2021-47505