CVE-2026-46274 io-wq: check that the predecessor is hashed in io_wq_remove_pending()

High 7.8 Published Updated

A use-after-free vulnerability in the Linux kernel's io-wq subsystem allows attackers to execute arbitrary code or escalate privileges via dangling pointers.

Exploited in the wild
Not known
Login needed
Any signed-in user
Attackable
Local or same network only
Victim action needed
Not needed
Fix
Available

What is CVE-2026-46274?

CVE-2026-46274 is a high-severity use after free vulnerability in Linux kernel, published on 8 Jun 2026. It can only be exploited from the same machine or local network, with no action from the victim.

Official 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.

Weakness: CWE-416

Which versions are affected by CVE-2026-46274?

It affects 1 product.

Products include Linux kernel.

How do I fix CVE-2026-46274?

Apply the vendor's patch.

Upgrade to the fixed version. These bugs are found with fuzzing and sanitisers and avoided by memory-safe languages. More about Use after free.

Is CVE-2026-46274 being exploited?

There is no known exploitation of CVE-2026-46274 in the wild and no public exploit code.

All Linux kernel vulnerabilities

Sources

Also known as AZL-89609, BELL-CVE-2026-46274, DEBIAN-CVE-2026-46274, GHSA-52w9-98q8-6pwf, ROOT-OS-DEBIAN-11-CVE-2026-46274, ROOT-OS-DEBIAN-12-CVE-2026-46274 and 4 more.

Is CVE-2026-46274 in your software?

Upload an SBOM and sbomify checks it against every vulnerability here, every day.

Check your SBOMs for free