sched_ext: Avoid UAF in scx_root_enable_workfn() init failure path
Subsystems (3)
Tejun Heo
reviewerPATCH 1/1 sched_ext: Avoid UAF in scx_root_enable_workfn() init failure path
In scx_root_enable_workfn(), put_task_struct(p) is called before scx_error() dereferences p->comm and p->pid. If the iterator's reference is the last drop, the task is freed synchronously and the deref becomes a UAF.
Move put_task_struct() past scx_error().
Reported-by Sashiko <[email protected]>
Fixes f0e1a0643a59 ("sched_ext: Implement BPF extensible scheduler class")
Cc [email protected] # v6.12+
Signed-off-by Tejun Heo <[email protected]>
--- kernel/sched/ext.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
kernel/sched/ext.c +1 -1
@@ -6973,10 +6973,10 @@ static void scx_root_enable_workfn(struct kthread_work *work)if (scx_get_task_state (p) !=SCX_TASK_DEAD )scx_set_task_state (p,SCX_TASK_NONE );task_rq_unlock (rq, p, &rf); -put_task_struct (p);scx_task_iter_stop (&sti);scx_error (sch,"ops.init_task() failed (%d) for %s[%d]" , ret, p->comm, p->pid); +put_task_struct (p); goto err_disable_unlock_all; }
--
2.49.1
Applied to sched_ext/for-7.1-fixes.
Thanks.
--
tejun