CVE-2024-26737

bpf: Fix racing between bpf_timer_cancel_and_free and bpf_timer_cancel

HIGH
7.8
CVSS Score
Published: April 3, 2024 at 05:00 PM UTC
Updated: August 5, 2026 at 12:04 PM UTC
1 product affected across 1 vendorLinux Kernel

Using Linux by Linux?

Get instant alerts when new vulnerabilities affect Linux - before attackers find them.

Real-time alertsTrack your software stackFree plan available
Severity
HIGH7.8
Exploit prediction
EPSS 0.3%
SSVC
No known exploit

Description

In the Linux kernel, the following vulnerability has been resolved: bpf: Fix racing between bpf_timer_cancel_and_free and bpf_timer_cancel The following race is possible between bpf_timer_cancel_and_free and bpf_timer_cancel. It will lead a UAF on the timer->timer. bpf_timer_cancel(); spin_lock(); t = timer->time; spin_unlock(); bpf_timer_cancel_and_free(); spin_lock(); t = timer->timer; timer->timer = NULL; spin_unlock(); hrtimer_cancel(&t->timer); kfree(t); /* UAF on t */ hrtimer_cancel(&t->timer); In bpf_timer_cancel_and_free, this patch frees the timer->timer after a rcu grace period. This requires a rcu_head addition to the "struct bpf_hrtimer". Another kfree(t) happens in bpf_timer_init, this does not need a kfree_rcu because it is still under the spin_lock and timer->timer has not been visible by others yet. In bpf_timer_cancel, rcu_read_lock() is added because this helper can be used in a non rcu critical section context (e.g. from a sleepable bpf prog). Other timer->timer usages in helpers.c have been audited, bpf_timer_cancel() is the only place where timer->timer is used outside of the spin_lock. Another solution considered is to mark a t->flag in bpf_timer_cancel and clear it after hrtimer_cancel() is done. In bpf_timer_cancel_and_free, it busy waits for the flag to be cleared before kfree(t). This patch goes with a straight forward solution and frees timer->timer after a rcu grace period.

Affected

Our own answer: ranges merged, affected separated from platform-only, with confidence and review flags.

5.15 ≤ v < 5.15.1505.15 ≤ v < 6.1.805.15 ≤ v < 6.6.195.15 ≤ v < 6.7.75.15 ≤ v < 6.85.16 ≤ v < 6.1.806.2 ≤ v < 6.6.196.7 ≤ v < 6.7.76.8 rc16.8 rc26.8 rc36.8 rc46.8 rc5b00628b1c7d595ae5b544e059c27b1f5828314b4
Vendor states this is fixed in 0281b919e175bb9c3128bd3872ac2903e9436e3f (fixed)
Vendor states this is fixed in 5268bb02107b9eedfdcd51db75b407d10043368c (fixed)
Vendor states this is fixed in 7d80a9e745fa5b47da3bca001f186c02485c7c33 (fixed)
Vendor states this is fixed in 8327ed12e8ebc5436bfaa1786c49988894f9c8a6 (fixed)
Vendor states this is fixed in addf5e297e6cbf5341f9c07720693ca9ba0057b5 (fixed)
Vendor states this is fixed in 5.15 (unaffected)
Vendor states this is fixed in 5.15.150 (unaffected)
Vendor states this is fixed in 6.1.80 (unaffected)
Vendor states this is fixed in 6.6.19 (unaffected)
Vendor states this is fixed in 6.7.7 (unaffected)
Vendor states this is fixed in 6.8 (unaffected)

References (5)

Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/0281b919e175bb9c3128bd3872ac2903e9436e3f
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/5268bb02107b9eedfdcd51db75b407d10043368c
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/7d80a9e745fa5b47da3bca001f186c02485c7c33
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/8327ed12e8ebc5436bfaa1786c49988894f9c8a6
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/addf5e297e6cbf5341f9c07720693ca9ba0057b5

SSVC — Action Prioritization

SSVCNo known exploitNot automatablePartial impact

SSVC signals action urgency (what to patch first), separate from CVSS which measures severity.

CVSS

7.8HIGHLinux
Vector?

Quick Info

StatusMODIFIED
CWE
CWE-416

Get alerted

Stop reading CVE feeds looking for your own stack

Track the products you run and VulnTracker tells you when a new CVE affects them — with what is known about fixing it, and nothing about the rest.

Free plan, no card