CVE-2026-98613

CVE-2026-98613

published October 18, 2026

CVSS
—
EPSS
0%
Percentile
6.8
In the wild
Unconfirmed
What it is

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

bpf: Bound ownership depth through local kptrs and graph roots

Program-allocated objects can own other local objects through referenced

kptrs. bpf_obj_free_fields() follows those pointers through

__bpf_obj_drop_impl() synchronously, before the object storage is freed

through RCU. A self-referential local kptr type therefore permits arbitrarily

deep object chains, and dropping the head can exhaust the kernel stack.

Long acyclic type chains have the same problem.

btf_check_and_fixup_fields() still assumes referenced kptrs only point to

kernel types and checks ownership through list and rbtree roots only. Its

existing rule is sufficient for graph-only cycles: the target of each graph

edge must contain a node, so every type in a cycle has both a root and a

node. The rule rejects such a type owning another root, breaking every

cycle. It also limits graph-only chains to three types, or two if the first

type contains a node, and conservatively rejects longer acyclic chains.

The missing local-kptr edges, rather than a missed graph-only cycle, are the

bug introduced by support for bpf_kptr_xchg() into local kptrs.

Replace that restriction with one bounded ownership walk covering graph

roots and local referenced kptrs. Run it after all BTF records have been

fixed up, reject cycles and paths deeper than eight record-bearing types,

and cache each type's suffix depth while checking it against the remaining

budget. This also permits the longer acyclic graph-only layouts rejected

by the old rule; update their existing BTF tests accordingly.

Keep the bound independent of MAX_CALL_FRAMES because recursive destruction

can run below a BPF call chain. A plain local pointee without special-field

metadata adds only a final non-recursing drop. Non-owning kptrs and

kernel-BTF kptrs do not recurse through local records and remain outside the

walk. Include local percpu-kptr edges too, although allocation of percpu

objects with special fields is currently forbidden, so that relaxing that

restriction cannot bypass the ownership bound.

btf_check_and_fixup_fields() continues to initialize graph_root.value_rec,

including for separately allocated map records. The ownership relationships

belong to immutable program BTF and only need validation at BTF load time.

The record
Technical detail
CVSS
Not scored
CVSS v4.0
Not supplied
EPSS
0.00176 · 6.8th percentile
Published
2026-10-18T20:17Z
References (4)
EPSS history
Timeline
  • 20 OCT 03:34Z
    EPSS moved — → 0%
    epss
  • 18 OCT 15:19Z
    bpf: Bound ownership depth through local kptrs and graph roots
    cvelistv5
  • 18 OCT 15:19Z
    bpf: Bound ownership depth through local kptrs and graph roots
    cvelistv5