mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 03:11:11 -04:00
sched_ext: Release cpus_read_lock on scx_link_sched() failure in root enable
scx_root_enable_workfn() takes cpus_read_lock() before
scx_link_sched(sch), but the `if (ret) goto err_disable` on failure
skips the matching cpus_read_unlock() - all other err_disable gotos
along this path drop the lock first.
scx_link_sched() only returns non-zero on the sub-sched path
(parent != NULL), so the leak path is unreachable via the root
caller today. Still, the unwind is out of line with the surrounding
paths.
Drop cpus_read_lock() before goto err_disable.
v2: Correct Fixes: tag (Andrea Righi).
Fixes: 25037af712 ("sched_ext: Add rhashtable lookup for sub-schedulers")
Reported-by: Chris Mason <clm@meta.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
@@ -6736,8 +6736,10 @@ static void scx_root_enable_workfn(struct kthread_work *work)
|
||||
rcu_assign_pointer(scx_root, sch);
|
||||
|
||||
ret = scx_link_sched(sch);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
cpus_read_unlock();
|
||||
goto err_disable;
|
||||
}
|
||||
|
||||
scx_idle_enable(ops);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user