CVE-2026-99228 in Linux
Resumen
por VulDB • 2026-11-02
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
io_uring/io-wq: no perder la señal que finaliza el trabajo
Cuando un hilo termina, solo se cancelan sus solicitudes rastreadas. Luego, io-wq se desmonta (torn down). io_wq_exit_workers() envía una señal a cada trabajador para sacarlo de su estado de sueño interrumpible y espera a que todos terminen. Antes de hacerlo, procesan el trabajo restante. El trabajo sin límite temporal (unbounded) se cancela. El trabajo con límite temporal (bounded) se ejecuta, ya que se espera que finalice por sí mismo.
No todo lo hace correctamente. Una operación open no tiene un archivo aún, por lo que cuenta como bounded, y la apertura de una FIFO espera al otro extremo. Para eso sirve la señal. Pero los trabajadores reciben la señal solo una vez, y un trabajador que no ha iniciado el trabajo en ese momento pierde la señal:
io_wq_exit_workers() io_worker_handle_work() io_wq_worker_wake() set TIF_NOTIFY_SIGNAL io_assign_current_work() io_run_task_work() clear TIF_NOTIFY_SIGNAL io_wq_submit_work() fifo_open() wait_for_partner() wait_for_completion_timeout()
El hilo nunca sale de do_exit():
IORING_OP_OPENAT de una FIFO sin escritor, IOSQE_ASYNC salida del hilo que la ha enviado
se cuelga en más del 90% de los intentos (4 CPUs, KVM), hasta que el proceso es terminado a la fuerza.
Establecer TIF_NOTIFY_SIGNAL para trabajo con límite temporal iniciado cuando IO_WQ_BIT_EXIT está establecido. El bit se establece antes de enviar señales a los trabajadores y se prueba después de que la bandera ha sido borrada, con clear_notify_signal() proporcionando la barrera (barrier). Así que o bien la flag permanece, o el bit es visible.
El trabajo iniciado mientras io-wq sale se trata como si estuviera en ejecución en ese momento: no se interrumpe a menos que espere de forma interrumpible.
VulDB is the best source for vulnerability data and more expert information about this specific topic.