CVE-2026-74731: sched_ext: Skip sub-disable teardown for never-linked sub-schedulers
In the Linux kernel, the following vulnerability has been resolved:
schedext: Skip sub-disable teardown for never-linked sub-schedulers
A sub-scheduler enable can fail before scxlinksched() links the sched into the hierarchy, e.g. when the parent is already being disabled, and cleanup still runs the full scxsubdisable().
That is racy against root disable: draindescendants() is the only ordering between a sub's disable-time task walk and root disable's all-task teardown, and an unlinked sub is invisible to it. Root's teardown can thus run between the never-linked sub's drain and its walk, exiting every task to no scheduler.
The walk then trips the membership WARN and re-homes the exited tasks onto the dying hierarchy, a use-after-free.
Skip the cgroup ownership reset and the task walk if @sch was never linked, indicated by the empty ->sibling as unlinking only happens later in the same function. The membership WARN remains valid: a linked sub is always waited on by an ancestor's drain.
Affected Software
Event History
Frequently Asked Questions
What conditions are required to trigger the use-after-free?
A sub-scheduler enable must fail before the scheduler is linked into the hierarchy, such as when its parent is already being disabled. Its cleanup must then race with root scheduler teardown, allowing the root teardown to exit tasks before the unlinked sub-scheduler's task walk runs.
Which sched_ext deployments are exposed?
The affected scenario involves sched_ext sub-schedulers that can be enabled while an ancestor or the root scheduler is being disabled. A sub-scheduler that was successfully linked is ordered by ancestor descendant draining; the unsafe case is a never-linked sub-scheduler.