diff options
| author | Tejun Heo <tj@kernel.org> | 2026-07-16 10:45:23 -1000 |
|---|---|---|
| committer | Tejun Heo <tj@kernel.org> | 2026-07-17 21:29:27 -1000 |
| commit | 8c13364db9c9a43ed286f3a8d0fb9477b1adc43c (patch) | |
| tree | d6396c3ef826abd226e5068e8c57fc1c944142f7 /tools/perf/scripts/python/bin | |
| parent | 5f8b69642d18e1f3e11996707842ac530444e959 (diff) | |
sched_ext: Skip sub-disable teardown for never-linked sub-schedulers
A sub-scheduler enable can fail before scx_link_sched() links the sched into
the hierarchy, e.g. when the parent is already being disabled, and cleanup
still runs the full scx_sub_disable().
That is racy against root disable: drain_descendants() 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.
Fixes: 337ec00b1d9c ("sched_ext: Implement cgroup sub-sched enabling and disabling")
Signed-off-by: Tejun Heo <tj@kernel.org>
Reviewed-by: Andrea Righi <arighi@nvidia.com>
Diffstat (limited to 'tools/perf/scripts/python/bin')
0 files changed, 0 insertions, 0 deletions
