HIGH Introduced in 5.8
bpf Jmp32 Bypass
CVE-2026-98041
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
KernelScan AI8.8HIGH
01Description
In the Linux kernel, the following vulnerability has been resolved: bpf: Don't predict JMP32 pointer vs zero comparisons Consider the following program: r1 = map_value; /* low 32 bits are zero at runtime */ r6 = 0xdead000000000000; if w1 != 0 goto l1; l0: r1 += r6; r2 = *(u64 *)(r1 + 0); exit; l1: r6 = 0; goto l0; At the moment is_branch_taken() reports the jump as always taken, because it does not distinguish between BPF_JMP and BPF_JMP32 comparisons when processing 'if w1 != 0 ...'.
02KernelScan AI Analysis
Risk summary
A BPF verifier logic flaw allows crafted programs to bypass safety checks, leading to out-of-bounds kernel memory access. Any process with BPF loading privileges can exploit this; on systems with unprivileged BPF enabled, unprivileged local users and containers are affected, making it a container-escape primitive.
Vulnerability analysis
The BPF verifier incorrectly predicts the outcome of 32-bit conditional jumps that compare a pointer against zero. Because the verifier treats 32-bit comparisons the same as 64-bit ones, it assumes a non-null pointer always compares unequal to zero — but the lower 32 bits of a valid pointer may legitimately be zero, causing the verifier to skip verifying a code path that should have been fully checked. A crafted program can exploit this to hide unsafe memory accesses on the unverified path, which then execute at runtime with out-of-bounds access to kernel memory. The fix makes the verifier decline to predict 32-bit pointer comparisons against zero, forcing it to analyze both possible branches. This is reachable by any process that can load BPF programs, which requires CAP_BPF; on systems allowing unprivileged BPF, an unprivileged local user or container can trigger it.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 6.12 | 5.8 | 6.12.111 | d16f0eafcaa6 |
| 6.18 | 5.8 | 6.18.53 | e2ae33247e8b |
| 6.6 | 5.8 | 6.6.160 | 6e1544986536 |
| 7.2 | 5.8 | 7.2.7 | a4d7f94c1ca9 |
| mainline | 5.8 | 7.3 | e51179a4e098 |
| cip/6.12 | 5.8 | 6.12.111-cip32 | d16f0eafcaa6 |
04CIP Kernels
State of the newest release of each Civil Infrastructure Platform SLTS tree, from CIP's own fix records.
| CIP tree | State |
|---|---|
| cip/6.12 | Fixed in 6.12.111-cip32 |
| cip/6.1 | Affected — no CIP fix yet (latest 6.1.189-cip61) |
| cip/6.1-rt | Affected — no CIP fix yet (latest 6.1.189-cip61-rt32) |
| cip/5.10 | Affected — no CIP fix yet (latest 5.10.271-cip78) |
| cip/5.10-rt | Affected — no CIP fix yet (latest 5.10.268-cip77-rt34) |