[PATCH] sched_ext: Validate cid override before updating tables
本 patch 将 scx_bpf_cid_override() 的验证与写入拆为两遍循环,避免验证失败中途导致查找表处于半更新状态。但拆分引入了 TOCTOU 竞态风险,且 Tejun Heo 指出 for-7.3 已有含 kmemdup() 的更完善实现,本 patch 无需 respin。
北京时间全部历史数据
最近同步:2026/08/28 15:52
本 patch 将 scx_bpf_cid_override() 的验证与写入拆为两遍循环,避免验证失败中途导致查找表处于半更新状态。但拆分引入了 TOCTOU 竞态风险,且 Tejun Heo 指出 for-7.3 已有含 kmemdup() 的更完善实现,本 patch 无需 respin。
v6.13 将 scx_bpf_dispatch[_vtime]_from_dsq 重命名为 scx_bpf_dsq_move[_vtime],但 scx_qmap 中一处注释仍用旧名,代码已用新名。本 patch 将注释同步更新,消除文档与代码不一致,已被 Tejun Heo 合入 sched_ext/for-7.3。
本补丁系列为 sched_ext 子调度器引入基于 shard 级 capability 的 CPU 委托机制,使父调度器能通过 grant/revoke 精细控制子调度器的 CPU 访问权限。核心设计是委托为状态而非调用——capability 以 per-shard cmask 存储,热路径通过 per-cpu effective caps 单次读取判断。系列还覆盖 kick、抢占、idle 报告等路径的 cap 执行和拒绝机制,以及驱逐不良子调度器的 kill kfunc。
Tejun Heo 向 Linus 提交 sched_ext v7.2-rc3 集中 bugfix pull,涵盖子调度器生命周期 use-after-free、dispatch 路径锁竞态、回调与任务状态残留、nohz_full tick 缺失及杂项修复。pr-tracker-bot 确认已合入 torvalds/linux。
Tejun Heo 提出 RFC 让 BPF arena 指针通过 __arena 后缀在 kfunc 和 struct_ops 边界自动翻译地址,消除手工偏移/cast 重复代码。kfunc 方向由 verifier fixup 注入 rebasing 指令,struct_ops 方向由 entry prologue 注入反向 rebasing,NULL 保留。v2 新增了 __arena 参数禁止 tail call 的限制,并修正注释风格。
本 patch 修复了 commit cabd76bbc036 在 scx_flatcg 中引入的回归:fcg_read_stats() 把 memset(stats,0) 放在 calloc() 失败检查之后,导致 calloc 失败时 stats 永远不会被写入,调用方读到未初始化的栈内存,造成 UB 并污染下一周期的 baseline。把 memset 上移到 calloc 检查之前即可保证 stats 始终被清零。Andrea Righi 给出评审,Tejun Heo 当天将其 pick 进 sched_ext/for-7.3。
Andrea Righi 发起 v5 系列,解开 SCHED_PROXY_EXEC 与 SCHED_CLASS_EXT 的 Kconfig 互斥,把 mutex-blocked donor 的处理交给 BPF 调度器(通过新标志 SCX_OPS_ENQ_BLOCKED)显式 opt-in。系列同时修齐 rq->curr/rq->donor 视图分离带来的 callback 配对、TOCTOU 与迁移策略问题,并附带 enq_blocked selftest 与 scx_qmap 的 -B 示例。sashiko-bot 标记了 PI de-boost 漏点、blocked donor 入队策略与...
Andrea Righi 提交 v4 补丁系列,让 proxy-exec 与 sched_ext 可以在同一内核中同时启用。通过引入 SCX_OPS_ENQ_BLOCKED 标志与 scx_bpf_task_proxy_cpu/cid() kfunc,BPF 调度器可以显式认领 blocked donor 并决定其派发时机与位置。系列同时修复了 ops.running/stopping 配对、consume_remote_task 的 TOCTOU race 以及 rq->curr/donor 拆分后的 DSQ 记账问题。John Stultz 在 review 中已发现 scx_pair 触...
Matt Fleming 报告在 128-CPU AMD EPYC 上跑 scx_lavd 时,遇到 scx enable 与 cgroup PSI trigger 写并发触发的 ABBA 死锁,并提交 patch 调换 scx_fork_rwsem 与 cgroup_mutex 的获取顺序。sashiko-bot 指出同类锁序在 disable 路径同样存在;Tejun Heo 提出更彻底的修复,把 psimon kthread 的 fork 从 cgroup_mutex 中拆出,并在 v2 中合并 rtpoll_timer UAF 修复。讨论揭示了 a5b98009f16d 引入的锁依赖问...
针对 6.18.y 的死锁修复:call_rcu_tasks_generic() 在 IRQs 关闭(持 rq->lock)时抢 cbs_gbl_lock,与 tasks-RCU wakeup 路径构成 ABBA 死锁。补丁将 IRQ-disabled 调用者改走无锁 llist 旁路,由 hard irq_work 稍后排干,fast path 不变。Paul McKenney 指出无法干净应用到 mainline,要求 forward-port,Matt 同意。