CVE-2026-31733Linux内核的sched_ext(调度扩展)组件中存在一个逻辑漏洞,涉及直接调度状态的管理。由于`ddsp_dsq_id`字段未在所有代码执行路径中正确清除,导致在特定唤醒场景下会触发虚假的内核警告。该问题的根本原因在于`dispatch_enqueue()`函数并未覆盖所有取消或消耗直接调度裁决的场景,这可能被本地攻击者利用来破坏系统调度的稳定性,导致拒绝服务。
该漏洞位于`kernel/sched/ext.c`模块中。`p->scx.ddsp_dsq_id`用于存储直接调度的目标DSQ ID。在正常流程中,该值应在任务被调度或取消后重置为`SCX_DSQ_INVALID`。然而,在某些边缘情况(如延迟调度、任务迁移或调度器切换时),该状态未被清理。当本地低权限用户通过`ops.select_cpu()`调用`scx_bpf_dsq_insert()`插入任务时,若此时`ddsp_dsq_id`残留旧值,会触发`mark_direct_dispatch()`中的`WARN_ON_ONCE`警告。这可能导致内核日志泛滥或潜在的调度异常,从而影响系统可用性(A:H)。修复方案是在`direct_dispatch`、`process_ddsp_deferred_locals`、`dequeue_task_scx`等关键函数中增加显式的状态清除逻辑。