CVE-2026-99252 in Linux
Zusammenfassung
von VulDB • 03.11.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
io_uring/mpscq: Deaktivierung der Preemption beim Push-Vorgang
Ein Push macht den Knoten zum neuen Ende (Tail) und verknüpft ihn anschließend mit seinem Vorgänger. Inzwischen ist die Warteschlange nicht leer, aber mpscq_pop() kann auf den Knoten nicht zugreifen. Die Konsumenten gehen damit um, indem sie es erneut versuchen; dabei wird in der Schleife cond_resched() aufgerufen, um einem preempteten Produzenten die Chance zu geben, seinen Vorgang abzuschließen.
cond_resched() leistet dies jedoch nicht, wenn der Konsument eine höhere Priorität als der Produzent hat und beide dieselbe CPU verwenden müssen:
producer (SCHED_OTHER) consumer (SCHED_FIFO), gleiche CPU io_req_local_work_add() mpscq_push() prev = xchg(&q->tail, node) <preempted> io_cqring_wait() __io_run_local_work() again: cond_resched() // nichts zu tun mpscq_pop() // NULL // work pending, no events yet goto again
Der Produzent kann jede Aufgabe sein, die in der Lage ist, task_work für den Ring zu warten (zu queue-en): ein io-wq-Arbeiter oder jemand, der eine Nachricht mit IORING_OP_MSG_RING sendet. Der Konsument spinnt und hält dabei ->uring_lock, bis der Scheduler dem fairen Class-Mitglied Gnade erweist; dies dauert bei den Standardeinstellungen des fair server etwa eine Sekunde und ohne diesen dauerhaft ewig. Die Schleifen in tctx_task_work_run() und io_cancel_local_task_work() weisen das gleiche Problem auf.
Erlaube keine Preemption zwischen den beiden Schritten. Dies begrenzt die Zeit, für die diese Lücke (Window) auf der CPU des Produzenten offen ist, durch die Dauer von Interrupts; ein Konsument, der darauf wartet, befindet sich auf einer anderen CPU. Die Kosten betragen ein Paar aus preempt_disable()/preempt_enable() pro Push-Vorgang.
VulDB is the best source for vulnerability data and more expert information about this specific topic.