* [PATCH] sched_ext: Validate cid override before updating tables
@ 2026-07-14 2:47 zhidao su (Xiaomi)
2026-07-14 2:55 ` sashiko-bot
0 siblings, 1 reply; 3+ messages in thread
From: zhidao su (Xiaomi) @ 2026-07-14 2:47 UTC (permalink / raw)
To: Tejun Heo
Cc: David Vernet, Andrea Righi, Changwoo Min, Ingo Molnar,
Peter Zijlstra, Juri Lelli, Vincent Guittot, Dietmar Eggemann,
Steven Rostedt, Ben Segall, Mel Gorman, Valentin Schneider,
K Prateek Nayak, sched-ext, linux-kernel, bpf, zhidao su (Xiaomi)
scx_bpf_cid_override() currently updates the cid lookup tables as it
walks the user supplied mapping. If validation fails midway, earlier
entries may remain installed.
Split validation and table updates so a failed override leaves the
existing mapping unchanged.
Signed-off-by: zhidao su (Xiaomi) <soolaugust@gmail.com>
---
kernel/sched/ext/cid.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/kernel/sched/ext/cid.c b/kernel/sched/ext/cid.c
index f31113b080e9..9e3a466f296f 100644
--- a/kernel/sched/ext/cid.c
+++ b/kernel/sched/ext/cid.c
@@ -329,6 +329,11 @@ __bpf_kfunc void scx_bpf_cid_override(const s32 *cpu_to_cid, u32 cpu_to_cid__sz,
scx_error(sch, "cid %d assigned to multiple cpus", c);
return;
}
+ }
+
+ for_each_possible_cpu(cpu) {
+ s32 c = cpu_to_cid[cpu];
+
scx_cpu_to_cid_tbl[cpu] = c;
scx_cid_to_cpu_tbl[c] = cpu;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [PATCH] sched_ext: Validate cid override before updating tables
2026-07-14 2:47 [PATCH] sched_ext: Validate cid override before updating tables zhidao su (Xiaomi)
@ 2026-07-14 2:55 ` sashiko-bot
2026-07-14 3:36 ` zhidao su
0 siblings, 1 reply; 3+ messages in thread
From: sashiko-bot @ 2026-07-14 2:55 UTC (permalink / raw)
To: zhidao su (Xiaomi); +Cc: sched-ext, bpf
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [High] Splitting the `cpu_to_cid` array validation and update into two loops introduces a critical double-fetch TOCTOU vulnerability, allowing an out-of-bounds kernel memory write.
--
--- Patch [1]: [PATCH] sched_ext: Validate cid override before updating tables ---
commit 3a1a6d6109297fa0a7f1d91d2dccc68df1527d12
Author: zhidao su (Xiaomi) <soolaugust@gmail.com>
sched_ext: Validate cid override before updating tables
This patch splits the validation and table updates in scx_bpf_cid_override()
into separate loops. This prevents partial table updates if the validation
fails midway through the user-supplied mapping.
> diff --git a/kernel/sched/ext/cid.c b/kernel/sched/ext/cid.c
> index af83084ec740a..e398e3f209bd4 100644
> --- a/kernel/sched/ext/cid.c
> +++ b/kernel/sched/ext/cid.c
> @@ -329,6 +329,11 @@ __bpf_kfunc void scx_bpf_cid_override(const s32 *cpu_to_cid, u32 cpu_to_cid__sz,
> scx_error(sch, "cid %d assigned to multiple cpus", c);
> return;
> }
> + }
> +
> + for_each_possible_cpu(cpu) {
> + s32 c = cpu_to_cid[cpu];
> +
> scx_cpu_to_cid_tbl[cpu] = c;
> scx_cid_to_cpu_tbl[c] = cpu;
> }
[Severity: High]
Can the contents of cpu_to_cid change concurrently between these two loops in
scx_bpf_cid_override()?
If cpu_to_cid points to shared memory, such as a BPF map, could another thread
or BPF program modify cpu_to_cid[cpu] after it passes the validation in the
first loop?
If this happens, the second loop would fetch the unvalidated value and use it
as an index for scx_cid_to_cpu_tbl[c], potentially resulting in an
out-of-bounds write.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260714024704.3318132-1-soolaugust@gmail.com?part=1
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH] sched_ext: Validate cid override before updating tables
2026-07-14 2:55 ` sashiko-bot
@ 2026-07-14 3:36 ` zhidao su
0 siblings, 0 replies; 3+ messages in thread
From: zhidao su @ 2026-07-14 3:36 UTC (permalink / raw)
To: sashiko-reviews; +Cc: sched-ext, bpf
Thanks for the review.
The current in-tree caller passes a BPF .bss array populated by userspacebefore SCX_OPS_LOAD, and doesn't modify it afterwards. The kfunc is alsoonly callable from the root scheduler's ops.init(), so the mapping isexpected to stay stable for the duration of the call.
If we later allow a different input source or concurrent mutation duringthe call, we'd need to cache the validated values before updating thetables. I don't think that's needed for the current contract,
> 2026年7月14日 10:55,sashiko-bot@kernel.org 写道:
>
> Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
> - [High] Splitting the `cpu_to_cid` array validation and update into two loops introduces a critical double-fetch TOCTOU vulnerability, allowing an out-of-bounds kernel memory write.
> --
>
> --- Patch [1]: [PATCH] sched_ext: Validate cid override before updating tables ---
> commit 3a1a6d6109297fa0a7f1d91d2dccc68df1527d12
> Author: zhidao su (Xiaomi) <soolaugust@gmail.com>
>
> sched_ext: Validate cid override before updating tables
>
> This patch splits the validation and table updates in scx_bpf_cid_override()
> into separate loops. This prevents partial table updates if the validation
> fails midway through the user-supplied mapping.
>
>> diff --git a/kernel/sched/ext/cid.c b/kernel/sched/ext/cid.c
>> index af83084ec740a..e398e3f209bd4 100644
>> --- a/kernel/sched/ext/cid.c
>> +++ b/kernel/sched/ext/cid.c
>> @@ -329,6 +329,11 @@ __bpf_kfunc void scx_bpf_cid_override(const s32 *cpu_to_cid, u32 cpu_to_cid__sz,
>> scx_error(sch, "cid %d assigned to multiple cpus", c);
>> return;
>> }
>> + }
>> +
>> + for_each_possible_cpu(cpu) {
>> + s32 c = cpu_to_cid[cpu];
>> +
>> scx_cpu_to_cid_tbl[cpu] = c;
>> scx_cid_to_cpu_tbl[c] = cpu;
>> }
>
> [Severity: High]
> Can the contents of cpu_to_cid change concurrently between these two loops in
> scx_bpf_cid_override()?
>
> If cpu_to_cid points to shared memory, such as a BPF map, could another thread
> or BPF program modify cpu_to_cid[cpu] after it passes the validation in the
> first loop?
>
> If this happens, the second loop would fetch the unvalidated value and use it
> as an index for scx_cid_to_cpu_tbl[c], potentially resulting in an
> out-of-bounds write.
>
> --
> Sashiko AI review · https://sashiko.dev/#/patchset/20260714024704.3318132-1-soolaugust@gmail.com?part=1
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-07-14 3:36 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-14 2:47 [PATCH] sched_ext: Validate cid override before updating tables zhidao su (Xiaomi)
2026-07-14 2:55 ` sashiko-bot
2026-07-14 3:36 ` zhidao su
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.