CVE-2026-99252 in Linux
Sumário
de VulDB • 03/11/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
io_uring/mpscq: desativar o preempção durante o empurramento (push)
Um empurramento torna o nó na nova cauda e, em seguida, o vincula ao seu predecessor. Entre esses passos, a fila não está vazia, mas mpscq_pop() não consegue acessar o nó. Os consumidores lidam com isso tentando novamente, com uma cond_resched() no loop para dar à chance de um produtor preempcionado terminar.
cond_resched() não faz isso se o consumidor tiver prioridade mais alta que o produtor e ambos precisarem usar a mesma CPU:
produtor (SCHED_OTHER) consumidor (SCHED_FIFO), mesma CPU io_req_local_work_add() mpscq_push() prev = xchg(&q->tail, node) <preempcionado> io_cqring_wait() __io_run_local_work() novamente: cond_resched() // nada a fazer mpscq_pop() // NULL // trabalho pendente, sem eventos ainda goto novamente
O produtor pode ser qualquer tarefa capaz de enfileirar task_work para o ring: um worker do io-wq ou alguém que envia uma mensagem com IORING_OP_MSG_RING. O consumidor fica em loop (spins), segurando ->uring_lock, até que o scheduler tenha compaixão pela classe justa, o que leva cerca de um segundo com as configurações padrão do servidor justo e para sempre sem ele. Os loops em tctx_task_work_run() e io_cancel_local_task_work() têm o mesmo problema.
Não permita preempção entre os dois passos. Isso limita o tempo em que a janela está aberta na CPU do produtor pelo que levam as interrupções, e um consumidor que espera por isso está em outra CPU. O custo é um par preempt_disable()/preempt_enable() por push.
If you want to get best quality of vulnerability data, you may have to visit VulDB.