CVE-2026-93270 in Linuxinfo

Summary

by MITRE • 09/24/2026

In the Linux kernel, the following vulnerability has been resolved:

bpf: Disallow interpreter fallback for BPF_ADDR_PERCPU insn

The BPF_MOV64_PERCPU_REG insn requires JIT to emit native code to for 'dst_reg = src_reg + <percpu_base_off>'.

However, the interpreter ignores the 'off' at its ALU64_MOV_X label. The 'off' indicates the insn is BPF_MOV64_PERCPU_REG insn. Then, when the interpreter loads memory from the register, it will hit a page fault.

[ 2.545572] BUG: unable to handle page fault for address: ffffffffacaaf034
[ 2.546485] #PF: supervisor read access in kernel mode
[ 2.547167] #PF: error_code(0x0000) - not-present page
[ 2.547850] PGD 134e63067 P4D 134e63067 PUD 134e64063 PMD 10021c063 PTE 800ffffeca550062
[ 2.548912] Oops: Oops: 0000 [#1] SMP PTI

Set jit_required as true in order to disallow interpreter fallback in core.c::__bpf_prog_select_runtime(), if any BPF_ADDR_PERCPU insn is patched to the prog.

BTW, rename the helper bpf_map_supports_cpu_flags() to bpf_map_is_percpu_map().

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

Analysis

by VulDB Data Team • 09/24/2026

The Linux kernel's Berkeley Packet Filter (BPF) subsystem provides a powerful mechanism for running sandboxed programs within the kernel space, primarily used for networking and observability. A critical flaw was identified in how the BPF interpreter handles specific instructions related to per-CPU data access. Specifically, the vulnerability centers on the BPF_MOV64_PERCPU_REG instruction, which is designed to move a register value by adding an offset representing the base address of per-CPU memory. This operation requires Just-In-Time (JIT) compilation support because it involves complex address calculation that depends on runtime context specific to each CPU core. The interpreter, however, contains a logic error where it ignores the immediate operand or offset associated with this instruction at its ALU64_MOV_X label. By failing to recognize and properly handle the per-CPU nature of the operation, the interpreter proceeds as if performing a standard register move without adjusting for the required base address translation.

This oversight leads directly to severe operational instability when an eBPF program utilizing such instructions falls back from JIT compilation to interpretation. Since the interpreter does not correctly compute the target memory address using the per-CPU base offset, it attempts to dereference an invalid or unmapped virtual address. This results in a kernel page fault during supervisor read access in kernel mode. The system logs typically show errors indicating that the processor encountered a non-present page while attempting to execute this flawed instruction sequence. Such faults can cause immediate crashes of the affected process and potentially destabilize the entire host system if not contained, representing a significant reliability issue for systems relying on dynamic BPF program loading.

From a security perspective, this vulnerability aligns with CWE-20 Improper Input Validation because the interpreter fails to correctly validate or handle the structural requirements of specific instruction types before execution. Furthermore, it relates to CWE-476 NULL Pointer Dereference in effect, as the incorrect address calculation leads to accessing memory that is not mapped into the kernel's address space. In terms of MITRE ATT&CK mapping for Linux systems, this flaw could be exploited by a malicious user with permission to load eBPF programs to cause a Denial of Service against the host system. An attacker who can inject crafted BPF bytecode might trigger these page faults repeatedly or in conjunction with other vulnerabilities to achieve arbitrary code execution if memory corruption conditions are met alongside the fault, although the primary impact observed is system instability and crash.

The resolution involves modifying the core logic responsible for selecting the BPF program runtime environment. The fix ensures that any BPF program containing instructions requiring per-CPU address translation explicitly disables interpreter fallback by setting a flag indicating JIT compilation is required. This forces the kernel to use the native code generator, which correctly implements the necessary arithmetic for calculating per-CPU addresses. Additionally, internal helper functions were refactored to improve clarity and maintainability, specifically renaming bpf_map_supports_cpu_flags to bpf_map_is_percpu_map to better reflect its purpose of identifying maps that store data specific to individual CPU cores.

To mitigate this vulnerability in environments where kernel updates are not immediately available, administrators should restrict the ability to load eBPF programs to trusted users and processes only. Utilizing BPF restrictions such as CAP_BPF or seccomp filters can prevent unprivileged users from loading potentially malicious bytecode that might trigger these interpreter flaws. It is also advisable to monitor system logs for frequent page faults in kernel mode, which may indicate attempts to exploit this issue or other similar memory access errors within the networking stack. Ensuring timely application of security patches that include this fix is the most effective long-term mitigation strategy.

Responsible

Linux

Reservation

09/17/2026

Disclosure

09/24/2026

Moderation

accepted

CPE

ready

EPSS

0.00000

KEV

no

Activities

very low

Sources

Want to know what is going to be exploited?

We predict KEV entries!