CVE-2026-98960
NoneCVSS
—
EPSS
0.2%
Published
Oct 23, 2026
CISA due date
—
Cloudanix analysis
A bug in the Linux kernel can cause memory to leak away when certain disk operations are interrupted, potentially making the computer slow or unstable until the system is updated.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- Moderate
- Impact
- Denial Of Service
- Component
- OS kernel
- Class
- Memory Corruption
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The flaw is a kernel memory leak in the btrfs io_uring implementation: returning -EAGAIN from read or write paths without freeing the btrfs_uring_encoded_data PDU leaves the allocation attached to the command, and io_uring never releases driver-allocated PDUs on ring exit or request cancellation.
Why it matters to the business
Repeated triggering can exhaust kernel memory on systems using btrfs with io_uring, causing performance degradation, process failures, or full system instability; the issue affects recent kernels and requires prompt patching to avoid operational disruption.
How an attack unfolds
An attacker issues io_uring read or write operations against a btrfs filesystem that deliberately return -EAGAIN (for example by hitting non-blocking constraints), leaving the encoded data structure allocated; if the request is later cancelled or the ring is torn down, the memory is never reclaimed, allowing gradual or accelerated exhaustion through repeated submissions.
How to fix it
Upgrade to a kernel containing the fix that ensures btrfs_uring_encoded_data is freed on every -EAGAIN path for both reads and writes; apply the patch that moves allocation after the initial non-blocking attempt and frees on all early exits.
How to confirm the fix worked
Confirm the running kernel contains the commit that frees btrfs_uring_encoded_data on nowait -EAGAIN for reads and before any allocation for writes; test by exercising io_uring read/write workloads that previously returned -EAGAIN and verify no growth in slab or vmalloc usage attributable to the PDU structure.
Typical attack path
- Identify a target system running a vulnerable kernel with btrfs and io_uring enabled.
- Submit batches of non-blocking io_uring SQEs targeting btrfs files that trigger -EAGAIN returns before PDU allocation.
- Cancel or allow the ring to exit while the PDU remains attached.
- Repeat to accumulate unreleased kernel allocations until memory pressure occurs.
How to detect it
Review kernel logs for repeated btrfs io_uring paths returning -EAGAIN; inspect slabinfo or kmemleak reports for growth in structures sized to btrfs_uring_encoded_data; correlate with processes using io_uring against btrfs mounts.
What your security team should do
- Prioritize kernel updates on all systems using btrfs and io_uring within the next maintenance window.
- Monitor memory usage metrics on affected hosts for unexpected growth in kernel slab caches.
- Disable io_uring for untrusted workloads until patches are deployed if memory pressure is observed.
The record
In the Linux kernel, the following vulnerability has been resolved: btrfs: don't stash io_uring encoded data across -EAGAIN Returning -EAGAIN while leaving btrfs_uring_encoded_data in the cmd PDU leaks if the request is cancelled or the ring exits before reissue. io_uring does not free driver PDU allocations on cleanup. Write: io_queue_sqe() always issues with IO_URING_F_NONBLOCK first, so return -EAGAIN before allocating and free data on every exit. Read: free on nowait -EAGAIN too; only -EIOCBQUEUED keeps the allocation for btrfs_uring_read_finished().
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|