CVE-2026-46274 Details
Description
In the Linux kernel, the following vulnerability has been resolved: io-wq: check that the predecessor is hashed in io_wq_remove_pending() io_wq_remove_pending() needs to fix up wq->hash_tail[] if the cancelled work was the tail of its hash bucket. When doing this, it checks whether the preceding entry in acct->work_list has the same hash value, but never checks that the predecessor is hashed at all. io_get_work_hash() is simply atomic_read(&work->flags) >> IO_WQ_HASH_SHIFT, and the hash bits are never set for non-hashed work, so it returns 0. Thus, when a hashed bucket-0 work is cancelled while a non-hashed work is its list predecessor, the check spuriously passes and a pointer to the non-hashed io_kiocb is stored in wq->hash_tail[0]. Because non-hashed work is dequeued via the fast path in io_get_next_work(), which never touches hash_tail[], the stale pointer is never cleared. Therefore, after the non-hashed io_kiocb completes and is freed back to req_cachep, wq->hash_tail[0] is a dangling pointer. The io_wq is per-task (tctx->io_wq) and survives ring open/close, so the dangling pointer persists for the lifetime of the task; the next hashed bucket-0 enqueue dereferences it in io_wq_insert_work() and wq_list_add_after() writes through freed memory. Add the missing io_wq_is_hashed() check so a non-hashed predecessor never inherits a hash_tail[] slot.
A vulnerability in the Linux kernel's I/O workqueue management can lead to a use-after-free condition. The issue arises in the 'io-wq' component, where the 'io_wq_remove_pending()' function fails to properly verify if a work item predecessor is hashed before updating the workqueue's hash tail. This oversight allows a pointer to a non-hashed I/O control block to be incorrectly stored, creating a dangling pointer once the work item is completed and freed. The flaw persists for the duration of the task, potentially leading to memory corruption when the freed memory is overwritten.
The vulnerability has been addressed by adding a check to ensure that a non-hashed predecessor does not inherit a slot in the workqueue's hash tail. Users should upgrade to the latest version of the Linux kernel where this fix has been applied.
Metrics
CVSS 4.0 Severity and Vector Strings:
No CVSS 4.0 data is available for this CVE.
CVSS 3.x Severity and Vector Strings:
No data available for CVSS Version 2.0 on this CVE.
No SSVC data is available for this CVE.
References to Advisories, Solutions, and Tools
By selecting these links, you will be leaving this site. These are references gathered from the official CVE record and are not endorsed by Volerion.
| URL | Source(s) | Tag(s) |
|---|---|---|
| https://git.kernel.org/stable/c/252c5051dba9c709b6a72f2866f93e5e618b3f06 | kernel.org | Patch |
| https://git.kernel.org/stable/c/5a20ebf0c81b61f5ea3b1b529c100cad69b9f603 | kernel.org | Patch |
| https://git.kernel.org/stable/c/d376c131af7c7739a87ff037ed2fdb67c2542c8a | kernel.org | Patch |
| https://git.kernel.org/stable/c/d6a2d7b04b5a093021a7a0e2e69e9d5237dfa8cc | kernel.org | Patch |
| https://git.kernel.org/stable/c/d6bda9df0c0a3080804181464d5c0f4d78a4e769 | kernel.org | Patch |
Weakness Enumeration
| CWE-ID | CWE Name | Source |
|---|---|---|
| CWE-416 | Use After Free | [email protected] |
Affected Products
| Product | Versions |
|---|---|
| linux linux kernel | >= 5.8.6, < 5.9 >= 5.9.1, < 6.6.141 >= 6.7, < 6.12.91 >= 6.13, < 6.18.33 >= 6.19, < 7.0.10 5.9 - 5.9 rc3 5.9 rc4 5.9 rc5 5.9 rc6 5.9 rc7 5.9 rc8 7.1 rc1 7.1 rc2 7.1 rc3 |
CPE
Remediation
| |
Change History
5 change records found show changes
| Date | Action | Recorded By |
|---|---|---|
| Jul 23, 2026 | CVE Translated | [email protected] |
| Jul 8, 2026 | Initial Analysis | [email protected] |
| Jun 17, 2026 | CVE Modified | kernel.org |
| Jun 14, 2026 | CVE Modified | kernel.org |
| Jun 8, 2026 | New CVE Received | kernel.org |