All of lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Andrea Righi" <arighi@nvidia.com>
Cc: sched-ext@lists.linux.dev
Subject: Re: [PATCH 15/18] sched_ext: Delegate proxy donor admission to BPF schedulers
Date: Mon, 31 Aug 2026 18:08:37 +0000	[thread overview]
Message-ID: <20260831180837.947171F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260831134338.1531664-16-arighi@nvidia.com>

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] The new BPF scheduler receives `ops.dequeue` before `ops.enable` or `ops.enqueue` for retained proxy donors during root scheduler enablement, violating the BPF lifecycle contract.
--

commit 2446f36cb7fab90783875259131bf6b0d4fa2d3d
Author: Andrea Righi <arighi@nvidia.com>

    sched_ext: Delegate proxy donor admission to BPF schedulers

    Proxy execution keeps a mutex-blocked donor runnable so that its
    scheduling context can execute the mutex owner. This patch introduces
    SCX_OPS_ENQ_BLOCKED to allow schedulers to continue owning blocked donors.
    A proxy-migrated donor returns through the full wakeup activation path
    when the mutex is released.

> diff --git a/kernel/sched/ext/ext.c b/kernel/sched/ext/ext.c
> index f23e9f1ee2f3c..06067fe504a24 100644
> --- a/kernel/sched/ext/ext.c
> +++ b/kernel/sched/ext/ext.c

[ ... ]

> @@ -8027,6 +8108,14 @@ static void scx_root_enable_workfn(struct kthread_work *work)
>  
>  		if (old_class != new_class)
>  			queue_flags |= DEQUEUE_CLASS;
> +		if (old_class == new_class && new_class == &ext_sched_class) {
> +			/*
> +			 * This is an EXT-to-EXT scheduler ownership change, so
> +			 * sched_change_begin() won't end retained proxy execution.
> +			 */
> +			scx_prepare_task_sched_change(p);
> +			queue_flags |= DEQUEUE_NOCLOCK;
> +		}
                 ^

[Severity: High]
Does this code call ops.dequeue() on the new BPF scheduler before ops.enable()
has been called?

Looking at scx_root_enable_workfn() in kernel/sched/ext/ext.c, the task's
p->scx.sched is updated to the new scheduler in a previous loop. 

When scx_prepare_task_sched_change(p) is called during an EXT-to-EXT
scheduler ownership change, it triggers the following sequence:

scx_prepare_task_sched_change()
  sched_proxy_block_task()
    dequeue_task_scx()
      ops.dequeue()

Because dequeue_task_scx() sees the SCX_TASK_IN_CUSTODY flag left over from
the old scheduler, it executes ops.dequeue() on the new scheduler.

Since DEQUEUE_CLASS is omitted from queue_flags for EXT-to-EXT transitions,
the switching_to hook is skipped and scx_enable_task() is never called to
initialize the per-task state for the new scheduler.

Can this lead to the BPF program experiencing out-of-bounds map accesses or
NULL pointer dereferences, as it relies on ops.enable() to initialize state
before ops.dequeue() is called?

>  
>  		scoped_guard (sched_change, p, new_class, queue_flags) {
>  			scx_set_task_slice(p, READ_ONCE(sch->slice_dfl));

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260831134338.1531664-1-arighi@nvidia.com?part=15

  reply	other threads:[~2026-08-31 18:08 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-31 13:42 [PATCHSET v13 sched_ext/for-7.4] sched: Make proxy execution compatible with sched_ext Andrea Righi
2026-08-31 13:42 ` [PATCH 01/18] sched/core: Drop mutex locks before proxy rescheduling Andrea Righi
2026-08-31 13:42 ` [PATCH 02/18] sched/core: Dequeue waking proxy donors before reset Andrea Righi
2026-09-01  5:24   ` K Prateek Nayak
2026-09-08  9:28     ` Andrea Righi
2026-08-31 13:42 ` [PATCH 03/18] sched: Make NOHZ CFS bandwidth checks follow proxy donor Andrea Righi
2026-09-10  9:54   ` Peter Zijlstra
2026-08-31 13:42 ` [PATCH 04/18] sched/core: Avoid false migration warning for proxy donors Andrea Righi
2026-09-10 10:06   ` Peter Zijlstra
2026-08-31 13:42 ` [PATCH 05/18] sched: Pass next class to sched_change_begin() Andrea Righi
2026-09-10 10:12   ` Peter Zijlstra
2026-08-31 13:42 ` [PATCH 06/18] sched: Add helper to block retained proxy donors Andrea Righi
2026-08-31 13:42 ` [PATCH 07/18] sched: Add sched_ext hooks for proxy execution Andrea Righi
2026-09-10 10:38   ` Peter Zijlstra
2026-08-31 13:42 ` [PATCH 08/18] sched: Introduce WF_ON_RQ wake flag Andrea Righi
2026-09-10 10:45   ` Peter Zijlstra
2026-08-31 13:42 ` [PATCH 09/18] sched_ext: Block proxy donors across scheduler transitions Andrea Righi
2026-09-10 10:53   ` Peter Zijlstra
2026-09-10 11:41     ` Peter Zijlstra
2026-08-31 13:42 ` [PATCH 10/18] sched_ext: Fix ops.running/stopping() pairing for proxy-exec donors Andrea Righi
2026-08-31 13:42 ` [PATCH 11/18] sched_ext: Move reject DSQ draining into core Andrea Righi
2026-08-31 13:42 ` [PATCH 12/18] sched_ext: Generalize the reject DSQ reenqueue path Andrea Righi
2026-09-03 22:39   ` Tejun Heo
2026-09-08  9:34     ` Andrea Righi
2026-08-31 13:42 ` [PATCH 13/18] sched_ext: Handle proxy-exec races in remote DSQ transfers Andrea Righi
2026-08-31 13:42 ` [PATCH 14/18] sched_ext: Split curr|donor references properly Andrea Righi
2026-08-31 17:49   ` sashiko-bot
2026-09-08 10:15     ` Andrea Righi
2026-09-10 11:47   ` Peter Zijlstra
2026-08-31 13:42 ` [PATCH 15/18] sched_ext: Delegate proxy donor admission to BPF schedulers Andrea Righi
2026-08-31 18:08   ` sashiko-bot [this message]
2026-09-08 10:08     ` Andrea Righi
2026-09-10 13:39   ` Peter Zijlstra
2026-09-10 13:41   ` Peter Zijlstra
2026-08-31 13:42 ` [PATCH 16/18] sched_ext: Add selftest for blocked donor admission Andrea Righi
2026-08-31 13:42 ` [PATCH 17/18] sched_ext: scx_qmap: Add proxy execution support Andrea Righi
2026-08-31 18:33   ` sashiko-bot
2026-09-01  7:52   ` Richard Cheng
2026-09-08  9:42     ` Andrea Righi
2026-08-31 13:42 ` [PATCH 18/18] sched: Allow enabling proxy exec with sched_ext Andrea Righi
2026-09-03 22:51 ` [PATCHSET v13 sched_ext/for-7.4] sched: Make proxy execution compatible " Tejun Heo
2026-09-08  8:02   ` Peter Zijlstra

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260831180837.947171F000E9@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=arighi@nvidia.com \
    --cc=sashiko-reviews@lists.linux.dev \
    --cc=sched-ext@lists.linux.dev \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.