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

io_uring/cmd: don't leave list poison in ->hash_node

io_uring_cmd_del_cancelable() uses hlist_del() to take a command off
->cancelable_uring_cmd, which leaves LIST_POISON1/2 behind in
->hash_node. Requests are recycled through the request cache without
being reinitialised, and not every user of ->hash_node sets it up before
it is used:

If a vectored futex wait is woken while futex_wait_multiple_setup() is
still queueing the futexes, io_futexv_wait() doesn't add the request to
->futex_list, and leaves the completion to the task_work queued by the
wake up. io_futexv_complete() ends in __io_futex_complete(), whose
hlist_del_init() 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
uring_cmd in its previous life, e.g. a ublk FETCH_REQ, it writes through
LIST_POISON2:

Oops: general protection fault, probably for non-canonical address
KASAN: maybe wild-memory-access in range [0xdead000000000120-...]
RIP: 0010:io_futexv_complete+0x219/0x420
Call Trace:
tctx_task_work_run+0x804/0x950
tctx_task_work+0x71/0xa0
task_work_run+0x118/0x200

Leave the node unhashed.
Published: 2026-11-02
Score: n/a
EPSS: n/a
KEV: No
Impact: Kernel crash / General Protection Fault
Action: Immediate Patch
AI Analysis

Impact

The flaw arises when io_uring_cmd_del_cancelable removes a command from a cancellation list but leaves special poisoning markers in the underlying hash node. Because subsequent requests reuse the same memory without proper reinitialization, the poisoned entries can survive and be interpreted as valid pointers. When a routine later attempts to access the stale data, the kernel aborts with a general protection fault or KASAN wild‑memory‑access crash, leading to a denial of service or kernel panic. Based on the description, the likely attack vector involves a local user or privileged process that can issue crafted io_uring commands to trigger the path that leaves leftover poisoned nodes.

Affected Systems

This vulnerability is present in all Linux kernel builds that contain the unpatched io_uring code path, as identified by the CPE for the Linux kernel. Any system running a kernel version prior to those that incorporate the commit cited in the advisory is affected. No specific vendor or distribution is singled out beyond the generic Linux kernel.

Risk and Exploitability

Based on the description, the attacker likely needs local or privileged execution to invoke io_uring requests that trigger the bug. The vulnerability results in a memory corruption in kernel space, which typically requires a user with the ability to invoke io_uring commands. The available data show that the CVSS score is not publicly listed, and the EPSS score is unavailable; the vulnerability is not currently tracked in CISA KEV. Consequently, the risk level is primarily a local denial‑of‑service: an attacker could cause the kernel to crash by sending crafted io_uring requests. Because the flaw involves leftover pointers rather than a remote trigger, remote exploitation is unlikely without additional foothold. No immediate workaround exists beyond applying the updated kernel.

Generated by OpenCVE AI on November 2, 2026 at 18:07 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Apply the latest Linux kernel update that contains the fix for CVE-2026-99230.
  • Reboot the system to load the updated kernel.
  • Avoid invoking io_uring APIs until the patch is applied.

Generated by OpenCVE AI on November 2, 2026 at 18:07 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Mon, 02 Nov 2026 18:30:00 +0000

Type Values Removed Values Added
First Time appeared Linux linux
Weaknesses CWE-416
CWE-457
Vendors & Products Linux linux

Mon, 02 Nov 2026 16:15:00 +0000

Type Values Removed Values Added
Description In the Linux kernel, the following vulnerability has been resolved: io_uring/cmd: don't leave list poison in ->hash_node io_uring_cmd_del_cancelable() uses hlist_del() to take a command off ->cancelable_uring_cmd, which leaves LIST_POISON1/2 behind in ->hash_node. Requests are recycled through the request cache without being reinitialised, and not every user of ->hash_node sets it up before it is used: If a vectored futex wait is woken while futex_wait_multiple_setup() is still queueing the futexes, io_futexv_wait() doesn't add the request to ->futex_list, and leaves the completion to the task_work queued by the wake up. io_futexv_complete() ends in __io_futex_complete(), whose hlist_del_init() 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 uring_cmd in its previous life, e.g. a ublk FETCH_REQ, it writes through LIST_POISON2: Oops: general protection fault, probably for non-canonical address KASAN: maybe wild-memory-access in range [0xdead000000000120-...] RIP: 0010:io_futexv_complete+0x219/0x420 Call Trace: tctx_task_work_run+0x804/0x950 tctx_task_work+0x71/0xa0 task_work_run+0x118/0x200 Leave the node unhashed.
Title io_uring/cmd: don't leave list poison in ->hash_node
First Time appeared Linux
Linux linux Kernel
CPEs cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
Vendors & Products Linux
Linux linux Kernel
References

Subscriptions

Linux Linux Linux Kernel
cve-icon MITRE

Status: PUBLISHED

Assigner: Linux

Published:

Updated: 2026-11-02T16:06:37.984Z

Reserved: 2026-09-25T10:25:14.402Z

Link: CVE-2026-99230

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-11-02T16:17:47.927

Modified: 2026-11-02T16:17:47.927

Link: CVE-2026-99230

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-11-02T18:15:14Z

Weaknesses