---
id: CVE-2026-99159
title: 'ring-buffer: Fix the sub-buffer array base in rb_meta_subbuf_idx()'
summary: |-
  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_s…
severity: none
vendor: Linux
product: Linux
affected:
  - >-
    Linux >= b14d032973d4e6c36e025e96ea3437de53d072d9 <
    2f1248b728b56d583ea454fedf239550c49f7b18
  - >-
    Linux >= b14d032973d4e6c36e025e96ea3437de53d072d9 <
    7469b3585ef5f65840d467d2caa811a9098c84b9
  - >-
    Linux >= b14d032973d4e6c36e025e96ea3437de53d072d9 <
    25132363c723afc39aace8b098f547ab4a0ea759
  - Linux 6.12
published: '2026-10-28'
updated: '2026-10-28'
sourceUpdated: '2026-10-28T10:35:12.520Z'
source: CVEORG
sourceUrl: 'https://www.cve.org/CVERecord?id=CVE-2026-99159'
references:
  - url: 'https://git.kernel.org/stable/c/2f1248b728b56d583ea454fedf239550c49f7b18'
  - url: 'https://git.kernel.org/stable/c/7469b3585ef5f65840d467d2caa811a9098c84b9'
  - url: 'https://git.kernel.org/stable/c/25132363c723afc39aace8b098f547ab4a0ea759'
tags:
  - cve.org
ingestedAt: '2026-10-28T11:09:40.410Z'
---

## Overview

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

- `Linux >= b14d032973d4e6c36e025e96ea3437de53d072d9 < 2f1248b728b56d583ea454fedf239550c49f7b18`
- `Linux >= b14d032973d4e6c36e025e96ea3437de53d072d9 < 7469b3585ef5f65840d467d2caa811a9098c84b9`
- `Linux >= b14d032973d4e6c36e025e96ea3437de53d072d9 < 25132363c723afc39aace8b098f547ab4a0ea759`
- `Linux 6.12`

## Remediation

Refer to the linked advisories for vendor-supplied fixes and affected version ranges.
