CVE-2026-23417
Description
In the Linux kernel, the following vulnerability has been resolved:
bpf: Fix constant blinding for PROBE_MEM32 stores
BPF_ST | BPF_PROBE_MEM32 immediate stores are not handled by bpf_jit_blind_insn(), allowing user-controlled 32-bit immediates to survive unblinded into JIT-compiled native code when bpf_jit_harden >= 1.
The root cause is that convert_ctx_accesses() rewrites BPF_ST|BPF_MEM to BPF_ST|BPF_PROBE_MEM32 for arena pointer stores during verification, before bpf_jit_blind_constants() runs during JIT compilation. The blinding switch only matches BPF_ST|BPF_MEM (mode 0x60), not BPF_ST|BPF_PROBE_MEM32 (mode 0xa0). The instruction falls through unblinded.
Add BPF_ST|BPF_PROBE_MEM32 cases to bpf_jit_blind_insn() alongside the existing BPF_ST|BPF_MEM cases. The blinding transformation is identical: load the blinded immediate into BPF_REG_AX via mov+xor, then convert the immediate store to a register store (BPF_STX).
The rewritten STX instruction must preserve the BPF_PROBE_MEM32 mode so the architecture JIT emits the correct arena addressing (R12-based on x86-64). Cannot use the BPF_STX_MEM() macro here because it hardcodes BPF_MEM mode; construct the instruction directly instead.
AI Insight
LLM-synthesized narrative grounded in this CVE's description and references.
In the Linux kernel, constant blinding fails for BPF_PROBE_MEM32 immediate stores, leaving user-controlled 32-bit immediates unblinded in JIT code when bpf_jit_harden is enabled.
The vulnerability lies in the Linux kernel's BPF constant blinding mechanism. The function bpf_jit_blind_insn() is responsible for obfuscating immediate values in JIT-compiled BPF instructions when bpf_jit_harden >= 1. However, it only handles BPF_ST|BPF_MEM (mode 0x60) stores. During verification, convert_ctx_accesses() rewrites immediate stores to arena pointers into BPF_ST|BPF_PROBE_MEM32 (mode 0xa0), but the blinding switch statement does not match this new mode. Consequently, user-controlled 32-bit immediate values survive unblinded into the generated native code, bypassing the hardening protection.
To exploit this, an attacker must be able to supply BPF programs that include immediate stores to arena pointers. On systems where bpf_jit_harden is set to 1 or 2, the attacker's immediate value is not randomized. The attacker would also need the ability to load arbitrary BPF code, typically requiring privileged access (CAP_BPF) or another mechanism to load BPF programs. The exploitation scenario involves the unblinded constant being exposed in JIT code, potentially enabling constant-cache timing attacks or making JIT spray attacks more predictable.
The primary impact is the weakening of BPF JIT hardening. An unblinded constant can leak information about the kernel's address space layout or allow an attacker to control a value that is assumed to be obfuscated. This reduces the effectiveness of constant blinding as a mitigation against speculative execution attacks and other information disclosure techniques.
The fix adds BPF_ST|BPF_PROBE_MEM32 cases to bpf_jit_blind_insn() alongside the existing BPF_ST|BPF_MEM cases. The blinding transformation is identical: load the blinded immediate into BPF_REG_AX via mov+xor, then convert the immediate store to a register store (BPF_STX) while preserving the BPF_PROBE_MEM32 mode. This ensures that arena pointer store immediates are correctly blinded and hardened. The corrected code is included in the Linux kernel stable tree.
AI Insight generated on May 18, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.
Affected products
10cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*+ 9 more
- cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*range: >=6.9.1,<6.12.80
- cpe:2.3:o:linux:linux_kernel:6.9:-:*:*:*:*:*:*
- cpe:2.3:o:linux:linux_kernel:7.0:rc1:*:*:*:*:*:*
- cpe:2.3:o:linux:linux_kernel:7.0:rc2:*:*:*:*:*:*
- cpe:2.3:o:linux:linux_kernel:7.0:rc3:*:*:*:*:*:*
- cpe:2.3:o:linux:linux_kernel:7.0:rc4:*:*:*:*:*:*
- cpe:2.3:o:linux:linux_kernel:7.0:rc5:*:*:*:*:*:*
- cpe:2.3:o:linux:linux_kernel:7.0:rc6:*:*:*:*:*:*
- cpe:2.3:o:linux:linux_kernel:7.0:rc7:*:*:*:*:*:*
- (no CPE)
Patches
0No patches discovered yet.
Vulnerability mechanics
AI mechanics synthesis has not run for this CVE yet.
References
4News mentions
0No linked articles in our index yet.