ZeroHour

CVE-2026-81010

mass

Linux kernel io_uring waitid ignores cancellation, runs wait logic in wrong task context

CVSS 3.1
7.8 high
EPSS
Published
()
Modified
AI analysis

The Linux kernel's io_uring waitid implementation fails to honor the tw.cancel flag in its completion callback io_waitid_cb(), so when task work is diverted to the fallback kworker path (because task_work_add() can no longer queue to the submitting task), the callback still enters __do_wait(). Because waitid is inherently task-context dependent — __do_wait() looks up children relative to 'current' and the retry path uses current->signal->wait_chldexit — running it from a kworker makes the wait operate on the wrong task entirely, potentially touching kernel state without the submitting task's userspace context and leading to memory corruption or wrong-context siginfo handling. A local attacker with low privileges who can issue io_uring waitid requests on an affected kernel could trigger this; the issue is rated High (CVSS 7.8, AV:L/PR:L) with high confidentiality, integrity, and availability impact, consistent with local privilege escalation. Any system running a kernel that includes io_uring waitid support is affected, though exploitation requires local code execution and use of the io_uring waitid operation. No public proof of concept is known and the flaw is not in CISA's KEV, so exploitation is currently none known.

What to do: Patch to a kernel containing the fix (io_waitid_cb() now honors tw.cancel, completes with -ECANCELED, and skips the siginfo copy) as soon as your distribution backports it. On hosts where io_uring is not needed, consider disabling it via the kernel.io_disabled sysctl on kernels that support it or seccomp/LSM rules blocking io_uring setup. Watch for kernel oops reports or anomalous child-reaping behavior from processes using io_uring waitid.

Affected
Linux (kernel.org) Linux kernel
Estimated exposure
massBillions of devices carry Linux kernels in aggregate (Android phones, servers, embedded), with the actually triggerable subset using io_uring waitid unknown — Linux dominates cloud/server fleets and all Android devices, and io_uring ships in current mainline and distribution kernels, so the affected code path has an enormous install base even though triggering it requires local access and…

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

Description

In the Linux kernel, the following vulnerability has been resolved: io_uring/waitid: honor task_work cancellation io_waitid_cb() may run through the fallback task_work path when task_work_add() can no longer queue work to the originating task. The fallback runs from a kworker and io_uring marks such task work as canceled through tw.cancel. io_waitid_cb() currently ignores tw.cancel and calls __do_wait(). waitid is task-context dependent: __do_wait() performs child lookup relative to current, and the retry path also uses current->signal->wait_chldexit. If the callback runs from the fallback kworker, current is therefore not the task that submitted the request. Honor tw.cancel before entering __do_wait(). Complete the request with -ECANCELED and skip the siginfo copy, since canceled task work may run without the submitting task's userspace execution context. Keep the existing siginfo handling for normal waitid completion and explicit cancellation.

Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

In the news

No ingested article mentions this CVE yet.