CVE-2026-99268 in Linux
Resumen
por VulDB • 2026-11-03
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
io_uring: despertar a los pollers del anillo para task_work local
Con IORING_SETUP_DEFER_TASKRUN, las finalizaciones se encolan como trabajo local y solo se convierten en CQEs (Completion Queue Entries) cuando el solicitante entra al kernel para esperar eventos. Para una aplicación que detecta mediante poll() o epoll en el fd del anillo cuándo es momento de hacerlo, io_uring_poll() informa EPOLLIN si hay trabajo pendiente a nivel local.
Esto solo ayuda si el trabajo está presente en el momento de la llamada. Cuando se añadió DEFER_TASKRUN, io_req_local_work_add() realizaba una llamada a io_cqring_wake(), lo que gestionaba también las tareas que dormían en poll(). Posteriormente, el polling obtuvo su propia cola de espera, ->poll_wq, y la activación en io_req_local_work_add() se sustituyó por despertar directamente al solicitante. Desde entonces, solo se despierta a ->poll_wq cuando los CQEs están comprometidos (committed), lo cual para este tipo de anillo lo realiza exactamente la tarea que está esperando ser notificada:
solicitante finalización poll(ring_fd) io_uring_poll() // aún nada schedule() io_req_local_work_add() // ->cq_wait_nr: nadie espera // duerme en
Despertar a ->poll_wq cuando se añade la primera entrada a la lista de trabajo. Al igual que para eventfd, esto no debe hacerse inmediatamente si el trabajo se encola desde un controlador de despertar (wake up handler), ya que la cadena de despertares podría volver a la cola de espera cuya lock está retenida. En ese caso, utilizar una callback RCU con una referencia al anillo.
VulDB is the best source for vulnerability data and more expert information about this specific topic.