CVE-2026-99255 in Linux
Riassunto
di VulDB • 03/11/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
io_uring/io-wq: non nascondere un collegamento (link) dalle operazioni di cancellazione
Un task che termina annulla le sue richieste tracciate e attende fino a quando queste sono state rimosse. io_uring_cancel_generic() esamina ogni possibile posizione in cui una richiesta può trovarsi e va in sleep se non trova nulla da cancellare. Viene risvegliato (woken up) ogni volta che una delle richieste del task viene completata tramite task work o liberata.
Quando io-wq ha terminato di elaborare una richiesta che possiede un link, si verifica un intervallo temporale in cui la successiva richiesta collegata non può essere trovata:
io_worker_handle_work() io_assign_current_work(worker, NULL) io_wq_free_work(work) io_req_find_next() // rimuove il link dalla richiesta io_free_req() // task work per il task io_assign_current_work(worker, linked) io_run_task_work() cond_resched() worker->cur_work = linked
La richiesta non è in coda (pending), non è il lavoro corrente di un worker e non si trova ancora nella lista su cui sta per essere inserita. Se la fase eseguita dal task in uscita a causa di io_free_req() cade proprio in questo intervallo temporale, non viene trovato nulla e il task va in sleep. Il worker quindi avvia l'esecuzione del link, cosa che IO_WQ_BIT_EXIT non impedisce per i lavori con limite (bounded work). Se ciò fa sì che la richiesta venga inserita nella coda (parked), nessuna operazione verrà completata o liberata, e nessuno risveglierà il task. Nel caso in cui sia il processo a terminare, questo non potrà più essere ucciso.
NOP, IOSQE_ASYNC | IOSQE_IO_LINK FUTEX_WAIT, FUTEX2_PRIVATE exit del thread, oppure del processo, fino a 63us dopo
Con quattro di questi casi per round, dal 5° all'8% su 10.000 round si verificano blocchi (4 CPU, KVM):
io_uring_cancel_generic do_exit
Il commit f8b632e89a10 ("io_uring: tighten task exit cancellations") riguarda lo stesso intervallo temporale e fa sì che il task ricerchi nuovamente qualsiasi elemento che si verifica prima di io_free_req().
Liberare la richiesta una volta che il link diventa il lavoro corrente del worker, oppure è in coda (pending). Chiunque venga risvegliato da questa operazione potrà trovare il link, fino a quando non viene inserito nella posizione dove anche le cancellazioni lo cercano. Per fare ciò, dividere io_wq_free_work() in due parti distinte.
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.