Table of Contents
Published: 2026-09-21 · Category: RISC-V Datacenter · Reading time: ~4 min · Status: DRAFT
The record
CVE-2026-92518, CNA kernel.org, was published 17 September 2026 and updated 18 September 2026. Title: "riscv, bpf: Fix kernel stack corruption in tailcall with CFI".
Severity is 7.8 HIGH under CVSS 3.1, vector CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H — local attack vector, low complexity, low privileges required, no user interaction, with high impact on confidentiality, integrity and availability.
Root cause, in the maintainer's own words
The description is unusually precise, so it is worth quoting rather than paraphrasing:
When CONFIG_CFI_CLANG is enabled, prog->bpf_func already skips the kcfi instruction during setup. Including it again in the tailcall jump offset causes it to jump over an extra 4 bytes, skipping the stack pointer adjustment, which will result in kernel stack corruption.
Read that as an off-by-four. On RISC-V under Clang's Kernel Control Flow Integrity, the BPF program entry pointer is already adjusted past the kcfi instruction. The tailcall path adds that adjustment a second time. The jump therefore lands four bytes too far and skips the instruction that adjusts the stack pointer. Everything after that runs against a corrupted stack.
The consequence is named in the description: kernel stack corruption.
Who is actually exposed
Three conditions must hold simultaneously, which usefully narrows the blast radius:
- RISC-V kernel build (this is an architecture-specific defect in the RV64 BPF JIT)
CONFIG_CFI_CLANGenabled- BPF tailcalls in use, reachable by an attacker with local low-privilege code execution
Per the CVE record, the affected range begins at 6.12. Versions recorded as unaffected are:
- Anything before 6.12
- 6.18.52 onward through the 6.18 series
- 7.2.6 onward through the 7.2 series
- 7.3-rc1
The record also lists a set of pre-6.12 commit-range entries and three stable-tree commit references, so downstream backports exist. If you run a vendor kernel, match against your vendor's advisory rather than assuming the upstream numbering maps cleanly.
Why this is a datacenter story, not an embedded one
Clang CFI on RISC-V is a hardening configuration. It is the kind of option you switch on for internet-facing or multi-tenant hosts, and it pairs with BPF-heavy observability, networking and security tooling — exactly the stack a RISC-V server runs.
The uncomfortable irony is worth stating plainly: a control-flow-integrity feature is what triggers the bug. Turning on CFI does not merely fail to protect you here; under the specific tailcall path it actively introduces the corruption. That is an argument for testing hardening configurations as a distinct matrix, not for concluding that hardening is a bad idea.
RISC-V's own CFI consists of two independent extensions — Zicfilp (landing pads, for forward-edge) and Zicfiss (shadow stack, for backward-edge) — which is the hardware substrate this software CFI story sits alongside. That pairing is reported in secondary coverage; the CVE text itself only refers to Clang CFI.
A sibling fix landed in the same window
CVE-2026-90195 was updated 17 September 2026: "riscv, bpf: Fix missing sign-ext for signed 1-byte and 2-byte kfunc args".
On RV64 the ABI requires sign-extension for signed 1-byte and 2-byte kfunc arguments, and the RV64 JIT did not perform it. A prior commit had masked the issue by making arguments appear correctly extended; after that commit's removal the problem surfaced and failed the kfunc_call/kfunc_call_test4 selftests. That record lists the same unaffected boundaries: 6.12.110, 6.18.52, 7.2.6, 7.3-rc1.
Two RISC-V BPF correctness fixes in the same week is a reasonable signal about where the maturation pressure is.
What to do
- Check
CONFIG_CFI_CLANGon every RISC-V kernel you build. If it is off, this specific bug does not fire. - Move to a fixed tree — 6.18.52+, 7.2.6+, or 7.3-rc1 or later — or take the stable commits listed in the CVE record.
- Audit BPF tailcall usage. Workloads using tailcalls are the reachable path.
- Do not assume your vendor's version numbering matches upstream. Read the vendor advisory.
Not disclosed / not established
- Exploitation in the wild — none reported in the record.
- Precise fixed commit for every stable branch beyond the three references listed.
- Whether any distribution has shipped a RISC-V kernel with
CONFIG_CFI_CLANGon by default — not established here; check your distribution. - CVSS v4 score — the record provides 3.1 only.
Sources
- CVE-2026-92518, CNA kernel.org, published 17 Sep 2026, updated 18 Sep 2026: <https://www.cve.org/CVERecord?id=CVE-2026-92518>
- CVE-2026-90195, CNA kernel.org, updated 17 Sep 2026: <https://www.cve.org/CVERecord?id=CVE-2026-90195>
- Stable-tree commit references for CVE-2026-92518: <https://git.kernel.org/stable/c/34b1bb33a025787e05f966e74de18cd36276f801>, <https://git.kernel.org/stable/c/a6e11a81da3420fd37f1518d4f238c4d5784086e>, <https://git.kernel.org/stable/c/52fb1756ea1d2759dfef2d86245be00b05dac3a2>
Verification notes
- All severity, version and date data is taken from the CVE.org records directly, not from aggregator or threat-intelligence reseller pages. Several such pages reproduce this CVE with added narrative; none of that is used here.
- The root-cause paragraph is a near-verbatim quote, marked as such.
- The Zicfilp/Zicfiss pairing is a secondary-source statement, flagged inline, and is not part of the CVE text.
- No exploitability claim beyond the record's own CVSS vector is made.