Race in Linux io_uring io-wq lets exiting tasks hang
Key facts
- Attack vector
- —
- Privileges required
- —
- User interaction
- —
- Attack complexity
- —
- Impact type
- —
- Confidentiality · integrity · availability
- —
- Fix status
- Partial Red Hat: 4 without a fix
No CVSS vector from any source. Fix status from CNA and Red Hat.
Summary
In the Linux kernel io_uring io-wq worker, a finished request is freed while its linked next request is hidden from cancellation. A task that exits can then sleep without any wake-up, so it hangs and may not be killable. The flaw affects Linux kernel code from version 5.5 until the fixed releases listed in the solution.
Written with Claude Haiku 5.5 from the sources below · 2026-11-06
Description from the CNA
In the Linux kernel, the following vulnerability has been resolved: io_uring/io-wq: don't hide a link from cancellations A task that exits cancels its tracked requests and waits until they are gone. io_uring_cancel_generic() looks everywhere a request can be, and goes to sleep if it found nothing to cancel. It is woken up each time one of the requests of the task is completed by task work or freed. When io-wq is done with a request that has a link, there is a time in which the next request of the link can't be found: io_worker_handle_work() io_assign_current_work(worker, NULL) io_wq_free_work(work) io_req_find_next() // takes the link off the request io_free_req() // task work for the task io_assign_current_work(worker, linked) io_run_task_work() cond_resched() worker->cur_work = linked It is not pending, it is not the current work of a worker, and it is not yet on the list that it is about to be parked on. If the pass that the exiting task makes because of io_free_req() falls into that time, it finds nothing and the task goes to sleep. The worker then runs the link, which IO_WQ_BIT_EXIT doesn't prevent for bounded work. If that parks the request nothing is completed or freed, and nobody wakes up the task. If it is the process that exits it can't be killed any more either. NOP, IOSQE_ASYNC | IOSQE_IO_LINK FUTEX_WAIT, FUTEX2_PRIVATE exit of the thread, or of the process, up to 63us later With four of these per round 5 to 8 of 10,000 rounds hang (4 CPUs, KVM): io_uring_cancel_generic do_exit Commit f8b632e89a10 ("io_uring: tighten task exit cancellations") is about the same gap, and makes the task look again for whatever happens before io_free_req(). Free the request once the link is the current work of the worker, or pending. Whoever is woken up by that can find the link, until it is parked where cancellations look as well. To do so split io_wq_free_work() in two.
Why it matters now
SSVC decision points
Not available: CISA has not published SSVC decision points for this record.
Affected products
Remediation
Update the Linux kernel to 6.1.191, 6.6.161, 6.12.115, 6.18.60, 7.2.14, 7.3.2 or 7.4-rc1. Red Hat lists Red Hat Enterprise Linux 9 and 10 and Red Hat OpenShift Container Platform 4 and 5 as affected with plan none_available.
Written with Claude Haiku 5.5 from the sources below · 2026-11-06
- Fix · CNA Linux (Linux) Fixed in 6.1.191, 6.6.161, 6.12.115, 6.18.60, 7.2.14, 7.3.2, 7.4-rc1
Vendor assessments
Red Hat
Red Hat rating: Moderate. Red Hat's page for this CVE →
| Product | Status | Plan or fix |
|---|---|---|
| Red Hat Enterprise Linux 10 | Affected | No fix yet: Fix deferred |
| Red Hat Enterprise Linux 9 | Affected | No fix yet: Fix deferred |
| Red Hat OpenShift Container Platform 4 | Affected | No fix yet: Fix deferred |
| Red Hat OpenShift Container Platform 5 | Affected | No fix yet: Fix deferred |
Not affected: 4 products
- Red Hat Enterprise Linux 6
- Red Hat Enterprise Linux 7
- Red Hat Enterprise Linux 8
- Red Hat OpenShift Container Platform 4
Timeline
- 2026-11-03 Threatist record created from CVE-2026-99255
- 2026-11-03 Alias added: GHSA-v9jm-vmfj-9vh2
- 2026-11-03 Fix available: Linux/Linux@436d48a2ed13112d2d27085325838e5bce6b4507, Linux/[email protected] · CNA
- 2026-11-03 1 new reference · CNA
- 2026-11-04 Affected versions changed · Red Hat
- 2026-11-04 CVSS score added · Red Hat
- 2026-11-06 Fix available: Linux/Linux@59e45f44c3cea9f4b2d099171c3cec1d25c5b638, Linux/[email protected] · CNA
- 2026-11-06 1 new reference · CNA
References
Other 7
- https://git.kernel.org/stable/c/98470f164286f7f62aaee519d4d11b9370ce6d7b
- https://git.kernel.org/stable/c/d39ebc7a583d650b1d6da9b45e2ce96ad4d877e4
- https://git.kernel.org/stable/c/ebe8e97fb99d9f374c482902a00677cfd24a6c27
- https://git.kernel.org/stable/c/3e02b8df0e9fa1423ac2a4e03409a9329c30ac49
- https://git.kernel.org/stable/c/92e20e9c72bdf6cfa6f84eded7b33399bc7061da
- https://git.kernel.org/stable/c/59e45f44c3cea9f4b2d099171c3cec1d25c5b638
- https://git.kernel.org/stable/c/436d48a2ed13112d2d27085325838e5bce6b4507
More Linux vulnerabilities
- TI-2025-26358 tls: fix handling of zero-length records on the rx_list KEVCVSS 3.1CRITICAL 9.8
- TI-2026-38352 netfilter: bridge: make ebt_snat ARP rewrite writable KEVCVSS 3.1HIGH 8.8
- TI-2021-02452 Incorrect authorization in Ubuntu linux kernel KEVCVSS 3.1HIGH 8.8
- TI-2013-05264 The (1) get_user and (2) put_user API functions in the Linux kernel before 3.5.5 on the… KEVCVSS 3.1HIGH 8.8
- TI-2022-00125 Integer overflow in kernel KEVCVSS 3.1HIGH 8.4
- TI-2013-01864 The perf_swevent_init function in kernel/events/core.c in the Linux kernel before 3.8.9… KEVCVSS 3.1HIGH 8.4
Sources
- CVE-2026-99255 · CVE Program
- CVE-2026-99255 · NVD
- FIRST EPSS
- GHSA-v9jm-vmfj-9vh2 · GitHub Advisory Database · CC BY 4.0
- CVE-2026-99255 · Red Hat security data · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences