CVE-2026-99229 in Linux
Résumé
par VulDB • 02/11/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
io_uring/wait : ne pas tourner en boucle sur une liste de débordement bloquée
Tant que le bit IO_CHECK_CQ_OVERFLOW_BIT est défini, io_cqring_wait_schedule() retourne immédiatement, avant d'examiner les signaux ou d'armer le délai d'expiration, afin que io_cqring_wait() puisse vider la liste de dépassement. Si cela ne vide pas la liste et si l'anneau CQ (Completion Queue) ne contient pas le nombre d'événements souhaité par l'appelant, la boucle redémarre avec le même résultat. La tâche tourne en boucle dans le noyau et ne peut pas être tuée.
L'hypothèse est que cela ne peut pas se produire : si les CQEs (Completion Queue Entries) ne peuvent pas être vidés, l'anneau est plein, et min_events est limité à la taille de l'anneau. Mais :
- Avec IORING_SETUP_CQE_MIXED, un CQE sur 32 bits nécessite deux entrées contiguës. Il reste bloqué dans la liste si une seule entrée libre subsiste, puis l'anneau contient moins d'événements que cq_entries. Une application mono-thread qui demande autant d'événements qu'il y a d'entrées dans l'anneau ne sort jamais de io_uring_enter().
- Le fait que l'anneau soit plein dépend du pointeur CQ head, que l'application peut modifier. Alors qu'un thread attend des événements sur un anneau vide, un autre peut déplacer le pointeur vers l'arrière pour faire croire à un état « plein » de l'anneau et provoquer un dépassement (overflow) de CQE. L'attente ne peut plus être interrompue, pas même par SIGKILL.
Seule l'application peut libérer de la place dans l'anneau CQ. Il faut y retourner si la liste n'a pas pu être vidée.
If you want to get best quality of vulnerability data, you may have to visit VulDB.