CVE-2026-98044

bpf: Reject legacy packet loads from callbacks

State
Published
Severity
Not scored
Published
Sep 25, 2026
Updated
Oct 21, 2026
Reserved
Sep 25, 2026

Read the record on cve.org

Description

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

bpf: Reject legacy packet loads from callbacks

check_ld_abs() models a failed BPF_LD_ABS or BPF_LD_IND in a subprogram as an implicit return with R0 set to zero. It calls prepare_func_exit() to explore this synthesized path.

When the load is reached directly from a synchronous callback, prepare_func_exit() enforces the callback return contract and marks R0 precise. R0 is not derived from a real instruction on this path, so precision backtracking reaches the callback call with R0 still requested and triggers the "callback unexpected regs" verifier bug. A privileged program loader can therefore cause a verifier warning and an -EFAULT BPF_PROG_LOAD.

These legacy packet-load instructions are deprecated. Reject them from callbacks rather than complicating their implicit-return model. Check all active frames before constructing the implicit return so nested static subprograms cannot hide the callback context.

Global functions are verified independently with a fresh frame zero, so an active-frame check cannot identify a global function called from a callback. Also check the complete subprogram call graph during stack-depth validation and reject a function containing a legacy load when any caller is a callback. This covers global and static descendants without making has_ld_abs transitive, preserving its per-function BTF return-type check. Ordinary uses outside callbacks remain supported.

Scores

The record has no CVSS score.

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • 8674e2db06cff6b50f2216eed9a761d15425bb34 to before cebda2a2bb4183550eae9dcf888c16407b4fffdaAffected
  • ce01a4e5cfac7adbe0be565f90cd32ecbb2f8337 to before 3484a99303912db62428494a9061212049027e57Affected
  • ee861486e377edc55361c08dcbceab3f6b6577bd to before bc489c0c9b8c86bd7fac42cfd1bb152f042fca56Affected
  • ee861486e377edc55361c08dcbceab3f6b6577bd to before e7d28823c662128caae63f14e16bd394916c139bAffected
  • 928d354ae3557e8f755a227e67be88034eb3cd7fAffected
  • 8a800497d9f6c2ec9c2c1ba7b71d0ac2ea7f7bbeAffected
  • de1055e7f9e67af32b1f3376066272b04e5223c0Affected
  • 37ad2bb11e9de92cb7b94548705eeedd87f7d392Affected
  • d846d83bdacbd8f14fc45c63b8c1d22608452e1cAffected
  • 6.12.101 to before 6.12.114Affected
  • 6.18.42 to before 6.18.53Affected
  • 5.10.265 to before 5.11Affected
  • 5.15.216 to before 5.16Affected
  • 6.1.183 to before 6.2Affected
  • 6.6.148 to before 6.7Affected
  • 7.0.10 to before 7.1Affected
LinuxLinux
  • 7.1Affected
  • before 7.1Not affected
  • 6.12.114 through 6.12.*Not affected
  • 6.18.53 through 6.18.*Not affected
  • 7.2.7 through 7.2.*Not affected
  • 7.3 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.