CVE-2021-47505 in Linuxinformazioni

Riassunto

di VulDB • 28/06/2026

Nel kernel Linux è stata risolta la seguente vulnerabilità:

aio: correzione del use-after-free dovuto alla gestione mancante di POLLFREE

signalfd_poll() e binder_poll() sono speciali in quanto utilizzano una waitqueue il cui ciclo di vita corrisponde al task corrente, anziché a struct file come avviene normalmente. Questo è accettabile per i poll bloccanti (blocking polls), poiché un poll bloccante si verifica all'interno di un singolo task; tuttavia, i poll non bloccanti richiedono una soluzione diversa. Questa soluzione prevede che la coda venga svuotata prima della sua liberazione, inviando una notifica POLLFREE a tutti gli waiters.

Sfortunatamente, solo eventpoll gestisce POLLFREE. Un secondo tipo di poll non bloccante, aio poll, è stato aggiunto nel kernel v4.18 e non gestisce POLLFREE. Ciò consente un use-after-free se viene effettuato il polling su un file descriptor signalfd o binder tramite aio poll e la waitqueue viene liberata.

Si risolve questo problema facendo sì che aio poll gestisca POLLFREE.

Una patch di Ramji Jiyani (https://lore.kernel.org/r/[email protected]) ha tentato di farlo facendo sì che aio_poll_wake() completi sempre la richiesta inline se viene rilevata POLLFREE. Tuttavia, tale soluzione presentava due bug. In primo luogo, introduceva un deadlock, poiché bloccava incondizionatamente il contesto aio mentre manteneva il lock della waitqueue, invertendo l'ordine normale di blocco. In secondo luogo, non considerava che le notifiche POLLFREE vengono perse mentre la richiesta è temporaneamente rimossa dalla coda (de-queued).

Il secondo problema era stato risolto da una mia patch precedente. Questa patch corregge quindi correttamente il use-after-free gestendo POLLFREE in modo privo di deadlock. Ciò avviene sfruttando il fatto che la liberazione della waitqueue è ritardata tramite RCU, simile a quanto fa eventpoll.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

Fonti

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!