* [GIT PULL] sched_ext: Fixes for v7.1-rc1
@ 2026-04-28 19:55 Tejun Heo
2026-04-29 14:00 ` pr-tracker-bot
0 siblings, 1 reply; 2+ messages in thread
From: Tejun Heo @ 2026-04-28 19:55 UTC (permalink / raw)
To: Linus Torvalds
Cc: linux-kernel, sched-ext, David Vernet, Andrea Righi, Changwoo Min,
Emil Tsalapatis
Hello, Linus.
The following changes since commit 3cd8b194bf3428dfa53120fee47e827a7c495815:
Merge tag 'v7.1-rc-part1-smbdirect-fixes' of git://git.samba.org/ksmbd (2026-04-16 08:25:04 -0700)
are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/tj/sched_ext.git tags/sched_ext-for-7.1-rc1-fixes
for you to fetch changes up to d99f7a32f09dccbe396187370ec1a74a31b73d7e:
sched_ext: Fix scx_flush_disable_work() UAF race (2026-04-28 07:40:03 -1000)
----------------------------------------------------------------
sched_ext: Fixes for v7.1-rc1
The merge window pulled in the cgroup sub-scheduler infrastructure, and
new AI reviews are accelerating bug reporting and fixing - hence the
larger than usual fixes batch.
- Use-after-frees during scheduler load/unload. The disable path
could free the BPF scheduler while deferred irq_work / kthread work
was still in flight; cgroup setter callbacks read the active
scheduler outside the rwsem that synchronizes against teardown.
Fixed both, and reused the disable drain in the enable error paths
so the BPF JIT page can't be freed under live callbacks.
- Several BPF op invocations didn't tell the framework which runqueue
was already locked, so helper kfuncs that re-acquire the runqueue
by CPU could deadlock on the held lock. Fixed at the affected
callsites, including recursive parent-into-child dispatch.
- The hardlockup notifier ran from NMI but eventually took a
non-NMI-safe lock. Bounced through irq_work.
- A handful of bugs in the new sub-scheduler hierarchy: helper
kfuncs hard-coded the root instead of resolving the caller's
scheduler; the enable error path tried to disable per-task state
that had never been initialized, and leaked cpus_read_lock on the
way out; a sysfs object was leaked on every load/unload; the
dispatch fast-path used the root scheduler instead of the task's;
and a couple of CONFIG #ifdef guards were misclassified.
- Verifier-time hardening: BPF programs of unrelated struct_ops
types (e.g. tcp_congestion_ops) could call sched_ext kfuncs - a
semantic bug and, once sub-sched was enabled, a KASAN
out-of-bounds read. Now rejected at load. Plus a few NULL and
cross-task argument checks on sched_ext kfuncs, and a selftest
covering the new deny.
- rhashtable (Herbert): restored the insecure_elasticity toggle and
bounced the deferred-resize kick through irq_work to break a
lock-order cycle observable from raw-spinlock callers. sched_ext's
scheduler-instance hash is the first user of both.
- The bypass-mode load balancer used file-scope cpumasks; with
multiple scheduler instances now possible, those raced. Moved
per-instance, plus a follow-up to skip tasks whose recorded CPU is
stale relative to the new owning runqueue.
- Smaller fixes: a dispatch queue's first-task tracking misbehaved
when a parked iterator cursor sat in the list; the runqueue's
next-class wasn't promoted on local-queue enqueue, leaving an SCX
task behind RT in edge cases; the reference qmap scheduler stopped
erroring on legitimate cross-scheduler task-storage misses.
----------------------------------------------------------------
Cheng-Yang Chou (3):
sched_ext: Deny SCX kfuncs to non-SCX struct_ops programs
selftests/sched_ext: Add non_scx_kfunc_deny test
sched_ext: Fix scx_flush_disable_work() UAF race
Herbert Xu (1):
rhashtable: Restore insecure_elasticity toggle
Kuba Piecuch (1):
sched_ext: Call wakeup_preempt() in local_dsq_post_enq()
Richard Cheng (1):
sched_ext: sync disable_irq_work in bpf_scx_unreg()
Tejun Heo (19):
sched_ext: Mark scx_sched_hash insecure_elasticity
rhashtable: Bounce deferred worker kick through irq_work
tools/sched_ext: scx_qmap: Silence task_ctx lookup miss
sched_ext: Defer scx_hardlockup() out of NMI
sched_ext: Unregister sub_kset on scheduler disable
sched_ext: Guard scx_dsq_move() against NULL kit->dsq after failed iter_new
sched_ext: Skip tasks with stale task_rq in bypass_lb_cpu()
sched_ext: Don't disable tasks in scx_sub_enable_workfn() abort path
sched_ext: Read scx_root under scx_cgroup_ops_rwsem in cgroup setters
sched_ext: Resolve caller's scheduler in scx_bpf_destroy_dsq() / scx_bpf_dsq_nr_queued()
sched_ext: Use dsq->first_task instead of list_empty() in dispatch_enqueue() FIFO-tail
sched_ext: Save and restore scx_locked_rq across SCX_CALL_OP
sched_ext: Pass held rq to SCX_CALL_OP() for dump_cpu/dump_task
sched_ext: Pass held rq to SCX_CALL_OP() for core_sched_before
sched_ext: Make bypass LB cpumasks per-scheduler
sched_ext: Align cgroup #ifdef guards with SUB_SCHED vs GROUP_SCHED
sched_ext: Refuse cross-task select_cpu_from_kfunc calls
sched_ext: Reject NULL-sch callers in scx_bpf_task_set_slice/dsq_vtime
sched_ext: Release cpus_read_lock on scx_link_sched() failure in root enable
zhidao su (1):
sched_ext: Fix local_dsq_post_enq() to use task's scheduler in sub-sched
include/linux/rhashtable-types.h | 5 +
include/linux/rhashtable.h | 8 +-
kernel/sched/ext.c | 398 ++++++++++++++-------
kernel/sched/ext_idle.c | 20 +-
kernel/sched/ext_idle.h | 1 +
kernel/sched/ext_internal.h | 2 +
lib/rhashtable.c | 36 +-
tools/sched_ext/scx_qmap.bpf.c | 24 +-
tools/testing/selftests/sched_ext/Makefile | 1 +
.../selftests/sched_ext/non_scx_kfunc_deny.bpf.c | 44 +++
.../selftests/sched_ext/non_scx_kfunc_deny.c | 47 +++
11 files changed, 436 insertions(+), 150 deletions(-)
create mode 100644 tools/testing/selftests/sched_ext/non_scx_kfunc_deny.bpf.c
create mode 100644 tools/testing/selftests/sched_ext/non_scx_kfunc_deny.c
Thanks.
--
tejun
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-04-29 14:01 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-04-28 19:55 [GIT PULL] sched_ext: Fixes for v7.1-rc1 Tejun Heo
2026-04-29 14:00 ` pr-tracker-bot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox