UBUNTU-CVE-2026-99230: Medium severity ubuntu/linux vulnerability
In the Linux kernel, the following vulnerability has been resolved: iouring/cmd: don't leave list poison in ->hashnode iouringcmddelcancelable() uses hlistdel() to take a command off ->cancelableuringcmd, which leaves LISTPOISON1/2 behind in ->hashnode. Requests are recycled through the request cache without being reinitialised, and not every user of ->hashnode sets it up before it is used: If a vectored futex wait is woken while futexwaitmultiplesetup() is still queueing the futexes, iofutexvwait() doesn't add the request to ->futexlist, and leaves the completion to the taskwork queued by the wake up. iofutexvcomplete() ends in iofutexcomplete(), whose hlistdelinit() is fine for a request that is unhashed, which is how all other users of the node leave it. If the request was a cancelable uringcmd in its previous life, e.g. a ublk FETCHREQ, it writes through LISTPOISON2: Oops: general protection fault, probably for non-canonical address KASAN: maybe wild-memory-access in range [0xdead000000000120-...] RIP: 0010:iofutexvcomplete+0x219/0x420 Call Trace: tctxtaskworkrun+0x804/0x950 tctxtaskwork+0x71/0xa0 taskworkrun+0x118/0x200 Leave the node unhashed.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Compensating control
Ensure io_uring_cmd_del_cancelable() leaves ->hash_node unhashed rather than leaving LIST_POISON1/2 behind; use hlist_del_init() semantics for the request node.
Event History
Frequently Asked Questions
Which Ubuntu kernel variants are listed as affected?
The advisory lists Ubuntu linux, linux-fips, linux-aws, linux-azure, linux-gcp, linux-oracle, linux-aws-fips, and linux-azure-fips.
What conditions are involved in triggering the fault?
The described path requires a request previously used as a cancelable io_uring command, such as a ublk FETCH_REQ, to be recycled and later used by a vectored futex wait. A wakeup occurring while futex_wait_multiple_setup() is still queueing futexes can leave the request unhashed before completion attempts hlist_del_init() on its poisoned hash node.
What is the observable impact described for affected systems?
The issue can cause a kernel general protection fault, with KASAN reporting a possible wild-memory access involving LIST_POISON2. The example call trace reaches io_futexv_complete() through task work processing.