CVE-2024-35860

bpf: support deferring bpf_link dealloc to after RCU grace period

State
Published
Severity
7.8 High
Published
May 19, 2024
Updated
Oct 30, 2026
Reserved
May 17, 2024

Read the record on cve.org

Description

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

bpf: support deferring bpf_link dealloc to after RCU grace period

BPF link for some program types is passed as a "context" which can be used by those BPF programs to look up additional information. E.g., for multi-kprobes and multi-uprobes, link is used to fetch BPF cookie values.

Because of this runtime dependency, when bpf_link refcnt drops to zero there could still be active BPF programs running accessing link data.

This patch adds generic support to defer bpf_link dealloc callback to after RCU GP, if requested. This is done by exposing two different deallocation callbacks, one synchronous and one deferred. If deferred one is provided, bpf_link_free() will schedule dealloc_deferred() callback to happen after RCU GP.

BPF is using two flavors of RCU: "classic" non-sleepable one and RCU tasks trace one. The latter is used when sleepable BPF programs are used. bpf_link_free() accommodates that by checking underlying BPF program's sleepable flag, and goes either through normal RCU GP only for non-sleepable, or through RCU tasks trace GP *and* then normal RCU GP (taking into account rcu_trace_implies_rcu_gp() optimization), if BPF program is sleepable.

We use this for multi-kprobe and multi-uprobe links, which dereference link during program run. We also preventively switch raw_tp link to use deferred dealloc callback, as upcoming changes in bpf-next tree expose raw_tp link data (specifically, cookie value) to BPF program at runtime as well.

Scores

CVSSScoreVectorSource
3.17.8 HighCVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:HLinux

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • 0dcac272540613d41c05e89679e4ddb978b612f1 to before ac48dc6ac9240f73bf08d29edf65c2deca93ee5dAffected
  • 0dcac272540613d41c05e89679e4ddb978b612f1 to before 876941f533e7b47fc69977fc4551c02f2d18af97Affected
  • 0dcac272540613d41c05e89679e4ddb978b612f1 to before 5d8d447777564b35f67000e7838e7ccb64d525c8Affected
  • 0dcac272540613d41c05e89679e4ddb978b612f1 to before 1a80dbcb2dbaf6e4c216e62e30fa7d3daa8001ceAffected
LinuxLinux
  • 5.18Affected
  • before 5.18Not affected
  • 6.1.191 through 6.1.*Not affected
  • 6.6.26 through 6.6.*Not affected
  • 6.8.5 through 6.8.*Not affected
  • 6.9 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.