CVE-2026-43009 json
bpf: Fix incorrect pruning due to atomic fetch precision tracking
published 2026-05-01 6 mo ago modified 2026-10-30 9 d ago also EUVD-2026-26608
- cvss
- 7.8
- version 3.1, CNA
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- 0.2%
- EPSS 0.2% chance of exploitation in 30 days, percentile 5%
- public exploits
- 0
- none known
Summary
In the Linux kernel, the following vulnerability has been resolved:
bpf: Fix incorrect pruning due to atomic fetch precision tracking
When backtrack_insn encounters a BPF_STX instruction with BPF_ATOMIC and BPF_FETCH, the src register (or r0 for BPF_CMPXCHG) also acts as a destination, thus receiving the old value from the memory location.
The current backtracking logic does not account for this. It treats atomic fetch operations the same as regular stores where the src register is only an input. This leads the backtrack_insn to fail to propagate precision to the stack location, which is then not marked as precise!
Later, the verifier's path pruning can incorrectly consider two states equivalent when they differ in terms of stack state. Meaning, two branches can be treated as equivalent and thus get pruned when they should not be seen as such.
Fix it as follows: Extend the BPF_LDX handling in backtrack_insn to also cover atomic fetch operations via is_atomic_fetch_insn() helper. When the fetch dst register is being tracked for precision, clear it, and propagate precision over to the stack slot. For non-stack memory, the precision walk stops at the atomic instruction, same as regular BPF_LDX. This covers all fetch variants.
Before:
0: (b7) r1 = 8 ; R1=8 1: (7b) *(u64 *)(r10 -8) = r1 ; R1=8 R10=fp0 fp-8=8 2: (b7) r2 = 0 ; R2=0 3: (db) r2 = atomic64_fetch_add((u64 *)(r10 -8), r2) ; R2=8 R10=fp0 fp-8=mmmmmmmm 4: (bf) r3 = r10 ; R3=fp0 R10=fp0 5: (0f) r3 += r2 mark_precise: frame0: last_idx 5 first_idx 0 subseq_idx -1 mark_precise: frame0: regs=r2 stack= before 4: (bf) r3 = r10 mark_precise: frame0: regs=r2 stack= before 3: (db) r2 = atomic64_fetch_add((u64 *)(r10 -8), r2) mark_precise: frame0: regs=r2 stack= before 2: (b7) r2 = 0 6: R2=8 R3=fp8 6: (b7) r0 = 0 ; R0=0 7: (95) exit
After:
0: (b7) r1 = 8 ; R1=8 1: (7b) *(u64 *)(r10 -8) = r1 ; R1=8 R10=fp0 fp-8=8 2: (b7) r2 = 0 ; R2=0 3: (db) r2 = atomic64_fetch_add((u64 *)(r10 -8), r2) ; R2=8 R10=fp0 fp-8=mmmmmmmm 4: (bf) r3 = r10 ; R3=fp0 R10=fp0 5: (0f) r3 += r2 mark_precise: frame0: last_idx 5 first_idx 0 subseq_idx -1 mark_precise: frame0: regs=r2 stack= before 4: (bf) r3 = r10 mark_precise: frame0: regs=r2 stack= before 3: (db) r2 = atomic64_fetch_add((u64 *)(r10 -8), r2) mark_precise: frame0: regs= stack=-8 before 2: (b7) r2 = 0 mark_precise: frame0: regs= stack=-8 before 1: (7b) *(u64 *)(r10 -8) = r1 mark_precise: frame0: regs=r1 stack= before 0: (b7) r1 = 8 6: R2=8 R3=fp8 6: (b7) r0 = 0 ; R0=0 7: (95) exit
Patch / fix
- Linux Linux 6.1.191, 6.6.160, 6.12.114, 6.18.50, 6.19.12, 7.0
- linux Debian 13 6.12.115-2
- linux Debian 14 6.19.12-1
debian advisories DEBIAN-CVE-2026-43009
- linux-nvidia Ubuntu 26.04 LTS 7.0.0-1006.6
- linux-nvidia-tegra Ubuntu 24.04 LTS 6.8.0-1035.38
ubuntu advisories UBUNTU-CVE-2026-43009
Ubuntu security data © Canonical Ltd., from https://github.com/canonical/ubuntu-security-notices via OSV; changed: normalised to fixed package versions per release. CC BY-SA 4.0
- kernel-64kb SLE Module for Basesystem 15 SP7 6.4.0-150700.53.55.1
- kernel-syms SLE Module for Development Tools 15 SP7 6.4.0-150700.53.55.1
- kernel-azure SLE Module for Public Cloud 15 SP7 6.4.0-150700.53.55.1
- kernel-source SLE Module for Development Tools 15 SP7, SLE Module for Basesystem 15 SP7 6.4.0-150700.53.55.1
- kernel-default SLE Workstation Extension 15 SP7, SLE Module for Legacy 15 SP7, SLE Module for Basesystem 15 SP7 +2 more 6.4.0-150700.53.55.1
- kernel-zfcpdump SLE Module for Basesystem 15 SP7 6.4.0-150700.53.55.1
- kernel-obs-build SLE Module for Development Tools 15 SP7 6.4.0-150700.53.55.1
- kernel-default-base SLE Module for Basesystem 15 SP7 6.4.0-150700.53.55.1.150700.17.33.1
suse advisories SUSE-SU-2026:2238-1SUSE-SU-2026:2591-1SUSE-SU-2026:2482-1SUSE-SU-2026:22048-1SUSE-SU-2026:22087-1SUSE-SU-2026:22076-1
- git.kernel.org/stable/c/06999c8a2c52b13977771ab093b8e179821b532d commit
- git.kernel.org/stable/c/1aac6b271e0a80b91c2f6a8f75ab0c0b1fc8ffe8 commit
- git.kernel.org/stable/c/7c72e5f3741d1c5cc53439137162f0e09254e6e9 commit
- git.kernel.org/stable/c/ea150ffa9fc9f78c5cf22e1f7b06b6d016b1017c commit
- git.kernel.org/stable/c/7ffbe45b1d227e24659998a91cfd4c27af457e71 commit
- git.kernel.org/stable/c/179ee84a89114b854ac2dd1d293633a7f6c8dac1 commit
Vendor advisories
What the vendors themselves say about their products: affected, fixed or not affected, and what to do.
red hat product security vex CVE-2026-43009 updated cvss 5.5
kernel: bpf: Fix incorrect pruning due to atomic fetch precision tracking
-
Red Hat Enterprise Linux 8 perf, kernel, bpftool, kernel-rt, kernel-core, kernel-tools, +29 more Red Hat Enterprise Linux 9 rv, perf, rtla, kernel, bpftool, libperf, +83 more Red Hat Enterprise Linux 10 kernelaffected: no fix available “Fix deferred”
-
Red Hat Enterprise Linux 6 perf, kernel, python-perf, kernel-kdump, kernel-firmware, kernel-bootwrapper, +1 more Red Hat Enterprise Linux 7 perf, kernel, bpftool, kernel-rt, python-perf, kernel-kdump, +8 morenot affected: vulnerable code not present
Red Hat CSAF VEX © Red Hat, Inc., from https://security.access.redhat.com/data/csaf/v2/vex/; changed: reduced to product statuses and remediations. CC BY 4.0 · csaf
CISA SSVC
- Exploitation
- none
- Automatable
- no
- Technical impact
- total
- Assessed
- 23 d ago
Exploit prediction
0.16% chance of exploitation in the next 30 days, higher than 5% of all scored CVEs (FIRST EPSS, 2026-11-08).
CVSS scores
| assigned by | version | score | vector |
|---|---|---|---|
| CNA | 3.1 | 7.8 | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
Affected products
- Linux Linux
Classification
- Weakness
-
- CWE-682 Incorrect Calculation
- Technology feeds
References
- git.kernel.org /stable/c/06999c8a2c52b13977771ab093b8e179821b532d
- git.kernel.org /stable/c/1aac6b271e0a80b91c2f6a8f75ab0c0b1fc8ffe8
- git.kernel.org /stable/c/7c72e5f3741d1c5cc53439137162f0e09254e6e9
- git.kernel.org /stable/c/ea150ffa9fc9f78c5cf22e1f7b06b6d016b1017c
-
git.kernel.org
/stable/c/7ffbe45b1d227e24659998a91cfd4c27af457e71
patch
-
git.kernel.org
/stable/c/179ee84a89114b854ac2dd1d293633a7f6c8dac1
patch
Sources
- CVE List CVE-2026-43009
- NVD CVE-2026-43009
Fencer Vulns keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.