CVEvulnerability
CVE-2026-99262
Exploitation and prioritisation
- EU Vulnerability Database
- EUVD-2026-115787
- Status
- Received
- Published
- 2026-11-03
- Last modified
- 2026-11-03
- Assigner
- 416baaa9-dc9f-4396-8d5f-8c081fb06d67
Description
In the Linux kernel, the following vulnerability has been resolved:
io_uring/timeout: don't lose a cancel as io-wq arms a timeout
An IORING_OP_TIMEOUT run by io-wq, because of IOSQE_ASYNC, has the same
problem as poll, futex and waitid. io_wq_submit_work() looks at
IO_WQ_WORK_CANCEL once, before it issues the request. A cancel in between
flags the work, gets -EALREADY, and searches ->timeout_list in vain,
while the worker then adds the request and starts the timer:
io-wq worker io_try_cancel()
io_wq_submit_work()
IO_WQ_WORK_CANCEL isn't set
io_async_cancel_one()
sets IO_WQ_WORK_CANCEL
= -EALREADY
io_timeout_cancel() = -ENOENT
io_timeout()
adds the request to ->timeout_list
hrtimer_start()
= IOU_ISSUE_SKIP_COMPLETE
Nobody looks at the flag again, and the timeout runs its course. At ring
exit, io_uring_try_cancel_requests() cancels io-wq work and then kills
the timeouts the same way, so an exiting task can get stuck for the full
duration of such a timeout.
Look at the flag under ->timeout_lock, which the search takes as well,
and fail the request if it is set. If the search came first, the flag is
visible. If it comes later, it finds the request on the list.
References
- https://git.kernel.org/stable/c/68cd06ba918d9658c36c1973a0184795738dcc46 git.kernel.org
- https://git.kernel.org/stable/c/89f193dc3ef462059387e9691bf6af4b1808379a git.kernel.org
- https://git.kernel.org/stable/c/df705a274da10da7bb546e08b49fa80a6ef19c78 git.kernel.org
- https://git.kernel.org/stable/c/f10ab47077e63d6eee35b242c257c3947bb49e64 git.kernel.org
- https://git.kernel.org/stable/c/f1fabf17f37b252b11d8fe5c70c8056b70b005ca git.kernel.org
- https://git.kernel.org/stable/c/f9d5e02649587885852f46b6dc7c081b87f0ac3a git.kernel.org