data built 2026-10-19T13:16:53Z

Look up another CVE · open CVE-2026-53094 in the interactive tracker

CVE-2026-53094

bpf: Fix stale offload->prog pointer after constant blinding

7.8 EPSS 0.1% AV:L

Published 2026-06-24 (4 months ago) by the Linux kernel CNA. Subsystem kernel/bpf. Debian urgency: unimportant.

What to do, per Debian release

Debian's own status for CVE-2026-53094 in every release this site tracks, and what each one means in practice. Every status below is the one the Debian Security Team publishes for this CVE. source

ReleaseStatus VersionWhat this means
Debian 12bookwormnot affected6.1.190-1Nothing to do. bookworm never shipped the vulnerable code.
Debian 13trixiefixed6.12.94-1Update the kernel and reboot. Fixed in 6.12.94-1. A running kernel keeps the old code until the machine restarts.
Debian 14forkyfixed7.0.10-1Update the kernel and reboot. Fixed in 7.0.10-1. A running kernel keeps the old code until the machine restarts.
Debian unstablesidfixed7.0.10-1Update the kernel and reboot. Fixed in 7.0.10-1. A running kernel keeps the old code until the machine restarts.

The vulnerability

What the bug is

When a dev-bound-only BPF program (BPF_F_XDP_DEV_BOUND_ONLY) undergoes JIT compilation with constant blinding enabled (bpf_jit_harden >= 2), bpf_jit_blind_constants() clones the program. The original prog is then freed in bpf_jit_prog_release_other(), which updates aux->prog to point to the surviving clone, but fails to update offload->prog. This leaves offload->prog pointing to the freed original program. When the network namespace is subsequently destroyed, cleanup_net() triggers bpf_dev_bound_netdev_unregister(), which iterates ondev->progs and calls __bpf_prog_offload_destroy(offload->prog). Accessing the freed prog causes a page fault: BUG: unable to handle page fault for address: ffffc900085f1038 Workqueue: netns cleanup_net RIP: 0010:__bpf_prog_offload_destroy+0xc/0x80 Call Trace: __bpf_offload_dev_netdev_unregister+0x257/0x350 bpf_dev_bound_netdev_unregister+0x4a/0x90 unregister_netdevice_many_notify+0x2a2/0x660 ... cleanup_net+0x21a/0x320 The test sequence that triggers this reliably is: 1. Set net.core.bpf_jit_harden=2 (echo 2 > /proc/sys/net/core/bpf_jit_harden) 2. Run xdp_metadata selftest, which creates a dev-bound-only XDP program on a veth inside a netns (./test_progs -t xdp_metadata) 3. cleanup_net -> page fault in __bpf_prog_offload_destroy Dev-bound-only programs are unique in that they have an offload structure but go through the normal JIT path instead of bpf_prog_offload_compile(). This means they are subject to constant blinding's prog clone-and-replace, while also having offload->prog that must stay in sync. Fix this by updating offload->prog in bpf_jit_prog_release_other(), alongside the existing aux->prog update. Both are back-pointers to the prog that must be kept in sync when the prog is replaced.

Where it lives

The fix touches these files. If the subsystem is one you do not use, the practical exposure is lower, though the package is still the vulnerable one.

kernel/bpf/core.c

What this is
BPF [CORE]MAINTAINERS section matched on kernel/bpf/core.c · bpf@vger.kernel.org · Maintained

Check it on the machine

grep -w CONFIG_BPF /boot/config-$(uname -r)

Reads the booted kernel's own configuration, on the machine and nowhere else. =y is built in, =m is a module, and an is not set line means the code is not there.

Show whether Debian builds this, per release

Debian builds this code. Every release below compiles the affected file into the kernels it ships.

  • bookworm, trixie, forky, sidy
y
built into the kernel image on every flavour - only a patch removes it
Build switch
CONFIG_BPF

From the configuration Debian publishes for every kernel flavour it builds. It covers only the architectures Debian ships a linux-config package for, and nothing about a kernel you built yourself. Debian's own status above stays authoritative about the source package.MAINTAINERS kbuild Makefiles Debian linux-config packages

Signals

Published
2026-06-24 (4 months ago)source
CVSS
7.8 high
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:Hsource recompute it
Attack vector
local (AV:L)source
EPSS
0.13%, higher than 2.2% of all CVEssource
CISA KEV
not listedthe KEV catalogue
Debian urgency
unimportantsource
Subsystem
kernel/bpf

Upstream fixes

The versions the CNA records as introducing and fixing this, and the commit for each. source

IntroducedFixed inCommit
6.36.6.141a713b72ff88c
6.36.12.9125484c39d1ec
6.36.18.33059525cf18e6
6.37.0.10c79f8503d83d
6.37.1a1aa9ef47c29

Why the CNA scored it this way

Quoted from the kernel CNA's own scoring file, word for word. A highlighted metric carries the most severe value CVSS v3.1 defines for it, which is what pushes the score up. source

AV:LAttack vector, local
The vulnerable path is reached through local `bpf(BPF_PROG_LOAD)` and netlink/netns operations used to create and tear down a device-bound XDP program, not by remote packets.
AC:LAttack complexity, low
Once the target has BPF JIT hardening set to blind constants for all users, the trigger is deterministic: load a dev-bound-only XDP program with constants, then unregister the device or destroy the netns. There is no attacker-uncontrolled race to win.
PR:LPrivileges required, low
XDP program loading requires BPF and NET_ADMIN privileges, but these can be available in user-namespace/container deployments through BPF token delegation and namespaced capabilities. Under the required rule, this is scored as Low rather than High.
UI:NUser interaction, none
No victim action is required after the attacker has local execution; the attacker can perform the BPF load and netdevice/netns teardown directly.
S:UScope, unchanged
The bug corrupts/dereferences kernel memory within the same kernel security authority. This is standard local kernel compromise/DoS rather than a VM or hardware isolation boundary escape.
C:HConfidentiality impact, high
The stale `offload->prog` is a use-after-free of a `struct bpf_prog`; if reclaimed, the cleanup path trusts attacker-shaped pointers and can be developed into kernel memory disclosure primitives. Kernel UAFs are scored High for confidentiality.
I:HIntegrity impact, high
The same UAF can drive trusted list/free/write operations through forged `prog->aux` and `offload` pointers, making arbitrary kernel memory corruption or code execution plausible. Kernel UAFs are scored High for integrity.
A:HAvailability impact, high
The upstream report shows a reliable kernel page fault during `cleanup_net()`/netdevice unregister when the stale pointer is dereferenced. This is a kernel crash availability impact.