CVE-2026-99252
Received Received - Intake

Race Condition in Linux Kernel io_uring MPSC Queue

Vulnerability report for CVE-2026-99252, including description, CVSS score, EPSS score, affected products, exploitability, helpful resources, and attack-flow context.

Publication date: 2026-11-03

Last updated on: 2026-11-03

Assigner: kernel.org

Description

In the Linux kernel, the following vulnerability has been resolved: io_uring/mpscq: disable preemption while pushing A push makes the node the new tail, and then links it to its predecessor. In between the queue isn't empty, but mpscq_pop() can't get at the node. The consumers deal with that by trying again, with a cond_resched() in the loop to give a preempted producer the chance to finish. cond_resched() doesn't do that if the consumer has a higher priority than the producer and both have to use the same CPU: producer (SCHED_OTHER) consumer (SCHED_FIFO), same CPU io_req_local_work_add() mpscq_push() prev = xchg(&q->tail, node) <preempted> io_cqring_wait() __io_run_local_work() again: cond_resched() // nothing to do mpscq_pop() // NULL // work pending, no events yet goto again The producer can be any task that is able to queue task_work for the ring: an io-wq worker, or somebody who sends a message with IORING_OP_MSG_RING. The consumer spins, holding ->uring_lock, until the scheduler takes pity on the fair class, which takes about a second with the default settings of the fair server, and forever without it. The loops in tctx_task_work_run() and io_cancel_local_task_work() have the same problem. Don't allow preemption between the two steps. That bounds the time the window is open on the CPU of the producer by what interrupts take, and a consumer that waits for that is on another CPU. The cost is a preempt_disable()/preempt_enable() pair per push.

CVSS Scores

EPSS Scores

Probability:
Percentile:

Meta Information

Published
2026-11-03
Last Modified
2026-11-03
Generated
2026-11-03
AI Q&A
2026-11-03
EPSS Evaluated
N/A
NVD
EUVD

Affected Vendors & Products

Showing 2 associated CPEs
Vendor Product Version / Range
Linux Linux 50cb44bd0d5f243919a06b17b1d979fdcd72cb2b
Linux Linux 7.2

Helpful Resources

Exploitability

CWE
CWE Icon
KEV
KEV Icon
CWE ID Description
CWE-UNKNOWN

Attack-Flow Graph

AI Quick Actions

Instant insights powered by AI
Executive Summary

This vulnerability in the Linux kernel involves a race condition in the io_uring subsystem's multi-producer single-consumer queue (mpscq). A producer task pushes a node to the queue but can be preempted before completing the operation. A higher-priority consumer task on the same CPU may then spin indefinitely waiting for the queue to empty, as cond_resched() does not preempt the consumer to allow the producer to finish.

Detection Guidance

This vulnerability is specific to the Linux kernel's io_uring subsystem and cannot be detected via standard network scanning tools. Detection requires checking the kernel version and io_uring implementation. Use commands like 'uname -a' to check the kernel version and review io_uring-related logs or system behavior for hangs or delays in task completion.

Impact Analysis

This vulnerability can cause system hangs or severe performance degradation if a high-priority task is stuck waiting for a queue operation to complete while a lower-priority producer task is preempted. It may lead to unresponsive applications or system freezes under specific scheduling conditions.

Mitigation Strategies

Apply the latest kernel update from your Linux distribution to patch the io_uring/mpscq vulnerability. If immediate patching is not possible, consider disabling io_uring temporarily or restricting its use via kernel module parameters until the update is applied.

Chat Assistant

Ask questions about this CVE
Hi! I’m here to help you understand CVE-2026-99252. Ask me anything about the vulnerability, its impact, or mitigation strategies.
0/70

EPSS Chart

Security Radar

News mentioning this vulnerability
Loading related security news...