CVE-2026-98963
NoneCVSS
—
EPSS
0.2%
Published
Oct 23, 2026
CISA due date
—
Cloudanix analysis
A timing bug in the Linux storage layer can let a local program corrupt kernel memory, risking crashes or takeover on machines that use the btrfs filesystem with modern asynchronous I/O.
- Exploitation
- Local Privilege
- Attacker needs
- Local User
- Complexity
- Moderate
- Impact
- Privilege Gain
- Component
- OS kernel
- Class
- Use After Free
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Use-after-free in the btrfs io_uring read path: when all bios complete before btrfs_encoded_read_regular_fill_pages returns, btrfs_uring_read_extent_endio is invoked and the prior code path returned the I/O status directly, causing btrfs_uring_read_extent to unlock and free pages that btrfs_uring_read_finished would then free again.
Why it matters to the business
Kernel memory corruption or crashes on systems using btrfs with io_uring reads, leading to service outages, potential local privilege escalation, and data integrity issues in storage-heavy workloads.
How an attack unfolds
An attacker triggers a specific timing where all block I/O completes synchronously inside the read path, causing the double-free condition during io_uring completion handling; no public exploitation or named actors are associated with this flaw.
How to fix it
Apply the upstream kernel patch that ensures btrfs_uring_read_extent_endio always returns -EIOCBQUEUED; rebuild and deploy the fixed kernel on all affected systems; disable io_uring for btrfs workloads until patched if immediate upgrade is not feasible.
How to confirm the fix worked
Confirm the presence of the corrected return statement in btrfs_uring_read_extent_endio after applying the patch; run regression tests exercising btrfs io_uring read paths under high completion concurrency; verify no double-free warnings appear in kernel logs during those tests.
Typical attack path
- Mount a btrfs filesystem and enable io_uring support
- Issue a series of encoded reads that complete all bios before the fill_pages function returns
- Force the synchronous completion path to invoke both the endio and finished handlers
- Trigger the double unlock/free sequence to corrupt kernel memory structures
How to detect it
Search kernel logs and audit trails for double-free warnings or slab corruption messages referencing btrfs or io_uring structures around the time of read operations; examine io_uring completion events that coincide with btrfs extent handling.
What your security team should do
- Prioritize patching Linux kernels with btrfs support within the next maintenance window
- Monitor upstream stable releases for the exact fix commit
- Temporarily restrict io_uring usage on btrfs volumes for high-risk systems
- Include btrfs io_uring paths in future kernel fuzzing and static analysis runs
The record
In the Linux kernel, the following vulnerability has been resolved: btrfs: always return -EIOCBQUEUED after btrfs_uring_read_extent_endio If all bios finish before btrfs_encoded_read_regular_fill_pages() returns, it calls btrfs_uring_read_extent_endio() and previously returned the I/O status. A negative errno then made btrfs_uring_read_extent() unlock and free while btrfs_uring_read_finished() did the same again. Return -EIOCBQUEUED so only the deferred path cleans up.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|