Skip to content
statance
MenuClose
unknown

CVE-2026-99254

io_uring: don't flood a cancelling task with task_work

Published 3 Nov 2026 · Source updated 3 Nov 2026 · Retrieved 2026-11-04 20:15 UTC

Monitor this CVE ↗Full CVE monitoring on Pro and Business

What happened?

In the Linux kernel, the following vulnerability has been resolved:

io_uring: don't flood a cancelling task with task_work

io_ring_exit_work() asks each task which has used the ring to remove its tctx node, by task_work, and repeats that until the list is empty. io_tctx_exit_cb() doesn't touch the node while the task is in io_uring_cancel_generic(), which removes all the nodes at its end. So the work item queues the callback again as soon as it has completed, for nothing.

That is more than a waste of time. task_work_run() only returns when it finds the list empty. If the rings are released from inside the cancellation, because requests of other rings held the last references to their files, up to 64 work items keep sending callbacks to the one task which is running them. It never finds the list empty, never gets back to the cancellation, the nodes stay, and so it goes on: a task with 60 pairs of rings which poll each other ran 280000 callbacks in 5 seconds, 20 seconds after exit_group(). It ends when all the senders happen to be late at the same time. Until then the task keeps a CPU and the work items busy.

An exiting task can't be killed meanwhile. execve() cancels the requests in the same way, so a live task can get stuck there as well, for minutes. If it takes more than five, the work items run into the WARN_ON_ONCE(time_after(jiffies, timeout)) of io_ring_exit_work(). No privilege is needed for any of this.

If the callback has met a task in cancellation, wait a little before it is sent again. Nobody has to wake the work item up for that: either the node is gone by then, or it is the turn of the next round.

Description supplied by CVE Program. Formatting is simplified; follow the original advisory for full details.

Affected software and versions

Source-provided software and version information
SoftwareVersion informationFixed version
LinuxLinuxaffected: d56d938b4bef3e1421a42023cdcd6e13c1f50831 to < a22fb44e988b01b82235ea07f0bf0fc73e256596; affected: d56d938b4bef3e1421a42023cdcd6e13c1f50831 to < 2c75ebae8a7f09c99e31c7042b7d4d595f03b2b1; affected: d56d938b4bef3e1421a42023cdcd6e13c1f50831 to < 61c761fc21e00e45c33c2bb596be442d92fb8792; affected: d56d938b4bef3e1421a42023cdcd6e13c1f50831 to < 14f56e9c0b8fdc2e178acdbec9781e90ef46f7e9; affected: d56d938b4bef3e1421a42023cdcd6e13c1f50831 to < abdc57c7ebabaaf0b622178a6a85834e1e54ff80; affected: d56d938b4bef3e1421a42023cdcd6e13c1f50831 to < 22e643e61b9b6299b42ff7d88bab48bccada8a5dSee vendor advisory
LinuxLinuxaffected: 5.12; unaffected: 0 to < 5.12; unaffected: 6.1.191 to ≤ 6.1.*; unaffected: 6.6.161 to ≤ 6.6.*; unaffected: 6.12.115 to ≤ 6.12.*; unaffected: 6.18.60 to ≤ 6.18.*; unaffected: 7.2.14 to ≤ 7.2.*; unaffected: 7.4-rc1 to ≤ *See vendor advisory

Version information comes from the source record and can include unaffected products and exceptions. Distribution packages may contain backported fixes: an older upstream version alone does not prove a server is affected.

Is it being exploited?

This CVE was not listed in the CISA catalogue at our last retrieval. This does not establish that exploitation is absent.

CISA data retrieved 2026-11-06 16:38 UTC. Check CISA ↗

How to respond

  1. Confirm the product, installed package version, and any configuration requirements in the vendor advisory.
  2. Follow the vendor’s remediation or workaround guidance in the references below. Structured fixed-version data is unavailable here; the publisher’s description may include a fix or workaround.
  3. Restart affected services if required, then verify the running version. Known exploitation may warrant investigation as well as patching.

Sources and remediation references

This public advisory does not determine whether a particular server is affected. Records are refreshed as sources change; verify urgent decisions against the original advisory.

← Browse the public CVE feed