GPU VulnDB

Database/Kernel, userspace & hypervisor

Linux BPF: bpf_timer_init allocation under rq_lock can hard-lock a host CPU

CVSS 5.5CVE-2025-39886Kernel, userspace & hypervisorcurated

Impact

__bpf_async_init() allocated with GFP_ATOMIC, so a memcg charge raised during bpf_timer_init() could call cgroup_file_notify() and re-acquire a lock the caller already holds. The record shows a hardlockup from double-acquiring the same rq_lock when a sched_ext BPF program calls bpf_timer_init() from ops.runnable(), and notes other variants (cgroup_file_kn_lock, worker_pool::lock). A hardlockup is an unrecoverable host hang: every GPU job on the node dies and the node needs a reset, not a graceful drain. Reachable only where BPF programs - particularly sched_ext schedulers - run on the host, which is increasingly true of clusters tuning scheduling for accelerator workloads.

Who can reach it

Local and privileged: requires loading a BPF program (root or CAP_BPF, plus CAP_SYS_ADMIN-class rights for sched_ext) that calls bpf_timer_init() on a path holding rq_lock, together with memory pressure that triggers an MEMCG_MAX event. Not reachable by an ordinary tenant pod without BPF rights.

What to do

Take the stable kernel update that switches __bpf_async_init() to __GFP_HIGH so the memcg path runs with allow_spinning=false (five stable commits linked in the record; it depends on the companion mm patch, and no fixed release number is stated). Rolling it out means draining and rebooting nodes. Short of that, not running custom sched_ext/BPF programs that call bpf_timer_init() from locked scheduler callbacks avoids the path.

References

Related entries

All Kernel, userspace & hypervisor entries

This entry is curated: imported from vendor advisories with machine assistance, not yet individually verified. Confirm against your vendor's advisory before acting, and report anything wrong.