GPU VulnDB

Database/Kernel, userspace & hypervisor

Linux kernel sched_ext: deadlock and NULL deref when dispatch kfuncs assume the local rq

UnscoredCVE-2026-89518Kernel, userspace & hypervisorcurated

Impact

Under core scheduling, dispatch runs inside the core-wide pick and can target a sibling rq, so the CPU executing ops.dispatch() is not necessarily the dispatched rq's CPU. Several kfuncs assumed they were the same: scx_dsq_move() decided lock state from this_rq()'s flags and could take the source rq lock on top of an already-held dispatched rq lock, which can deadlock the host; scx_bpf_sub_dispatch() used a stashed sub_dispatch_prev that is NULL when dispatching for a sibling; and finish_dispatch(), scx_bpf_dsq_reenq() and scx_bpf_dsq_nr_queued() resolved SCX_DSQ_LOCAL to the wrong local DSQ, putting tasks on the wrong queue. A deadlocked rq on a GPU node is an unplanned loss of the whole node, and the SCX_DSQ_LOCAL resolution change also alters behaviour without core scheduling (a remote wakeup in ops.enqueue() now resolves to the op's rq), so scheduler authors should read the change rather than just take the patch.

Who can reach it

Local, limited to nodes running a sched_ext BPF scheduler that uses these kfuncs, primarily with core scheduling enabled. Loading the scheduler requires root; after that the faulty paths are hit by ordinary scheduling activity.

What to do

Update to a kernel where these kfuncs use scx_locked_rq() instead of this_rq() (two stable commits linked) and reboot each node. Disabling core scheduling, or unloading the sched_ext scheduler, avoids the sibling-dispatch case in the meantime. No fixed release numbers are stated in the record.

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.