CVE-2026-99159
NoneCVSS
—
EPSS
0.2%
Published
Oct 28, 2026
CISA due date
—
Cloudanix analysis
A bug in how the Linux kernel tracks memory for certain tracing buffers can cause crashes or lost diagnostic data when advanced tracing features are used.
- Exploitation
- Local Privilege
- Attacker needs
- Low Privilege
- Complexity
- Moderate
- Impact
- Denial Of Service
- Component
- OS kernel
- Class
- Memory Corruption
- Remediation
- Patch
- Effort
- Medium
- Patch risk
- Low
What it actually does
Incorrect base calculation in rb_meta_subbuf_idx() for persistent ring buffers causes subbuf_ids[0] to be left NULL and meta->buffers[] indices to be written one sub-buffer too high, leading to NULL dereference in __rb_map_vma() on trace_pipe_raw mmap and subsequent boot-time rejection of prior trace data in rb_cpu_meta_valid().
Why it matters to the business
Tracing features relying on persistent ring buffers become unreliable or crash, potentially disrupting diagnostics, observability pipelines, and post-boot trace retention on affected kernels.
How an attack unfolds
An attacker with sufficient privileges to configure and map a persistent ring buffer triggers the off-by-one index error during setup; subsequent mmap of trace_pipe_raw dereferences the NULL pointer, or a reboot discards prior traces, but no public exploit chains or threat actor usage are known.
How to fix it
Update to a kernel containing the commit that replaces the duplicated index calculation with rb_subbufs_from_meta() and rb_range_buffer() for consistent forward and reverse mapping; rebuild and reboot with the corrected kernel.
How to confirm the fix worked
Confirm the presence of the rb_subbufs_from_meta() helper and that rb_meta_subbuf_idx() now calls it; test persistent ring buffer creation, mmap of trace_pipe_raw, and reboot retention of prior traces.
Typical attack path
- Obtain privileges to create and mark a ring buffer as persistent
- Invoke rb_setup_ids_meta_page() which populates shifted subbuf_ids[]
- Trigger __rb_map_vma() or rb_update_meta_reader() on trace_pipe_raw
- Cause NULL dereference or force boot-time trace invalidation
How to detect it
Review kernel logs for NULL pointer dereferences in __rb_map_vma or ring buffer mapping paths; inspect ftrace or tracefs usage around persistent buffer configuration; no specific post-exploitation artifacts are known.
What your security team should do
- Prioritize kernel upgrade on systems using persistent ring buffers or ftrace
- Monitor upstream stable and distribution kernel releases for the fix
- Temporarily avoid persistent mode for ring buffers until patched
The record
In the Linux kernel, the following vulnerability has been resolved: ring-buffer: Fix the sub-buffer array base in rb_meta_subbuf_idx() On a persistent ring buffer, rb_meta_subbuf_idx() can return an index one sub-buffer too high. rb_setup_ids_meta_page() then fills subbuf_ids[] shifted by one and leaves subbuf_ids[0] NULL, which __rb_map_vma() dereferences when userspace maps trace_pipe_raw. rb_update_meta_reader() writes two such indices into meta->buffers[], which rb_cpu_meta_valid() would reject on the next boot, discarding the previous boot's trace. A CPU's sub-buffer array starts after its meta header and the nr_subbufs integers that follow, aligned up to a sub-buffer. rb_meta_subbuf_idx() inverts that calculation but skips only the integers, not the header, so its base is one sub-buffer low whenever the omitted header size crosses the alignment boundary. Invert the calculation with rb_subbufs_from_meta() rather than repeating it. rb_range_buffer() maps an index back to an address through the same helper, so the two directions can no longer disagree.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|