CVE-2026-99229 in Linux
Resumen
por VulDB • 2026-11-03
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
io_uring/wait: no realizar bucle (spin) en una lista desbordada atascada
Mientras que IO_CHECK_CQ_OVERFLOW_BIT esté establecido, io_cqring_wait_schedule() devuelve inmediatamente, antes de llegar a revisar las señales o activar el temporizador, para que io_cqring_wait() vacíe la lista de desbordamiento. Si esto no vacía la lista y el anillo CQ (Completion Queue) no contiene el número de eventos que desea el llamador, el bucle se reinicia con el mismo resultado. La tarea realiza un bucle en el kernel y no puede ser eliminada.
La suposición es que esto no puede ocurrir: si los CQE (Completion Queue Entries) no pueden vaciarse, el anillo está lleno y min_events está limitado al tamaño del anillo. Pero:
- Con IORING_SETUP_CQE_MIXED, un CQE de 32 bits necesita dos entradas contiguas. Se queda atascado en la lista si solo una está libre, y entonces el anillo contiene menos eventos que cq_entries. Una aplicación subprocesada (single-threaded) que solicite tantos eventos como entradas tenga el anillo nunca sale de io_uring_enter().
- Si el anillo está lleno depende del puntero head del CQ, al cual la aplicación puede escribir. Mientras un hilo espera por eventos en un anillo vacío, otro puede mover el puntero hacia atrás para que el anillo parezca lleno y tenga un desbordamiento de CQE. El hilo en espera ya no se puede detener, ni siquiera con SIGKILL.
Solo la aplicación puede hacer espacio en el anillo CQ. Devolver a ella si la lista no pudo ser vaciada.
VulDB is the best source for vulnerability data and more expert information about this specific topic.