KernelScan.io

HIGH

bpf Backtrack Bypass

CVE-2026-98085

CVSS 7.8 / 10.0 KernelScan AI

CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

01

In the Linux kernel, the following vulnerability has been resolved: bpf: backtrack_insn(): Handle ld_{abs,ind} subprog exit edge Nicholas Carlini reported a bug in precision backtracking mechanism for BPF_LD | BPF_{IND,ABS} instructions. These instructions are modelled as two branches: - fallthrough; - implicit exit from current subprogram. The implicit exit case was not handled by the backtrack_insn() function. When backtracking such a path backtrack_insn() did not call bt_subprog_enter(), which meant that backtracking continued manipulating precision marks in a caller frame, while looking at instructions in a callee frame. This lead to segmentation faults during verification (see the selftest), or unsound state pruning.

02

Engine v0.6.0

Risk summary

A flaw in the BPF verifier's precision backtracking for legacy packet-load instructions (ld_abs/ld_ind) in subprograms causes incorrect frame handling, leading to verifier crashes or unsound state pruning. An attacker who can load BPF programs can exploit the unsound pruning to bypass verifier safety checks, gaining arbitrary kernel read/write and potential privilege escalation. Any system allowing BPF program loading is at risk.

Affectedkernel/bpf/backtrack.c (bpf verifier)

Vulnerability analysis

The BPF verifier's precision backtracking mechanism fails to account for the implicit subprogram-exit branch that legacy ld_abs/ld_ind instructions model. When backtracking that exit path, the verifier continues modifying precision marks in a caller's frame while reading instructions from a callee's frame, creating a frame mismatch that can crash the verifier or produce unsound state pruning — meaning programs that should be rejected are accepted, bypassing the verifier's safety guarantees. The fix detects when backtracking the implicit-exit branch and switches to the correct caller frame before continuing. The vulnerability is reachable by any local user who can load BPF programs, which requires CAP_BPF (or unprivileged BPF if enabled on the system).

03

BranchIntroducedFixed inPatch commit
5.105.10.2655.11671b7b9a660e
5.155.15.2165.16387b1baefbb7
6.16.1.1836.2—
6.66.6.1486.7—
6.126.12.1016.13—
6.186.18.426.19—
7.07.0.107.1—
7.2—7.2.7—
mainline—7.3-rc2—