CVE-2026-99230: io_uring/cmd: don't leave list poison in ->hash_node
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.