CVE-2026-99255 in Linux
Résumé
par VulDB • 03/11/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
io_uring/io-wq : ne pas masquer un lien (link) aux annulations
Une tâche qui se termine annule ses requêtes suivies et attend qu'elles soient supprimées. io_uring_cancel_generic() recherche partout où une requête peut se trouver, et s'endort si elle n'a rien trouvé à annuler. Elle est réveillée chaque fois que l'une des requêtes de la tâche est terminée par le travail de la tâche (task work) ou libérée.
Lorsque io-wq a terminé avec une requête qui possède un lien, il existe une période pendant laquelle la prochaine requête du lien ne peut pas être trouvée :
io_worker_handle_work() io_assign_current_work(worker, NULL) io_wq_free_work(work) io_req_find_next() // retire le lien de la requête io_free_req() // travail de tâche pour la tâche io_assign_current_work(worker, linked) io_run_task_work() cond_resched() worker->cur_work = linked
La requête n'est pas en attente (pending), elle ne constitue pas le travail actuel d'un ouvrier (worker), et elle n'est pas encore sur la liste où elle va être stationnée. Si l'itération effectuée par la tâche qui se termine, due à io_free_req(), tombe dans cette période, elle ne trouve rien et la tâche s'endort. L'ouvrier exécute alors le lien, ce que IO_WQ_BIT_EXIT n'empêche pas pour les travaux limités (bounded work). Si cela stationne la requête, aucune complétion ni libération ne se produit, et personne ne réveille la tâche. S'il s'agit du processus qui se termine, il ne peut plus être tué non plus.
NOP, IOSQE_ASYNC | IOSQE_IO_LINK FUTEX_WAIT, FUTEX2_PRIVATE exit du thread ou du processus, jusqu'à 63 µs plus tard
Avec quatre de ces cas par tour, 5 à 8 des 10 000 tours se bloquent (4 CPU, KVM) :
io_uring_cancel_generic do_exit
Le commit f8b632e89a10 ("io_uring: tighten task exit cancellations") concerne le même intervalle de temps et oblige la tâche à rechercher à nouveau tout ce qui se produit avant io_free_req().
Libérez la requête une fois que le lien est devenu le travail actuel de l'ouvrier, ou qu'il est en attente. Quiconque est réveillé par cela peut trouver le lien, jusqu'à ce qu'il soit stationné là où les annulations cherchent également. Pour y parvenir, divisez io_wq_free_work() en deux parties.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.