CVE-2026-98463: sched_ext: Derive SCX_RQ_IN_WAKEUP from the core enqueue flags
In the Linux kernel, the following vulnerability has been resolved:
schedext: Derive SCXRQINWAKEUP from the core enqueue flags
scheduledeferredlocked() skips scheduling a deferred action while SCXRQINWAKEUP is set and relies on the taskwokenscx() call that follows a wakeup enqueue to run it. enqueuetaskscx() sets the flag from the merged enqueue flags, which include the flags stashed for a remote activation. moveremotetasktolocaldsq() thus sets SCXRQINWAKEUP on the destination rq when the moved task was woken up, although no taskwokenscx() follows that activation.
An IMMED insert into a busy destination requests a local reenqueue during that enqueue. The request gets linked but not scheduled and stays pending until an unrelated wakeup or preemption on that CPU runs the deferred actions. The IMMED task sits behind the running task in the meantime. If nothing runs them before the scheduler is disabled, the request outlives the scheduler and points into its freed per-cpu area, which the next scheduler dereferences from rundeferred().
Test the core enqueue flags for the wakeup bit. Only the core's wakeup path is followed by taskwokenscx().
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
ubuntu/linux-hwe-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-42.42~24.04.1 - Upgrade
Upgrade
ubuntu/linux-riscv-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-42.42.1~24.04.1 - Upgrade
Upgrade
ubuntu/linuxto a version that resolves this vulnerability.Fixed in 7.0.0-42.42 - Upgrade
Upgrade
ubuntu/linux-awsto a version that resolves this vulnerability.Fixed in 7.0.0-1016.17 - Upgrade
Upgrade
ubuntu/linux-gcpto a version that resolves this vulnerability.Fixed in 7.0.0-1016.18 - Upgrade
Upgrade
ubuntu/linux-ibmto a version that resolves this vulnerability.Fixed in 7.0.0-1017.17 - Upgrade
Upgrade
ubuntu/linux-oem-7.0to a version that resolves this vulnerability.Fixed in 7.0.0-1017.17 - Upgrade
Upgrade
ubuntu/linux-oracleto a version that resolves this vulnerability.Fixed in 7.0.0-1015.16 - Upgrade
Upgrade
ubuntu/linux-riscvto a version that resolves this vulnerability.Fixed in 7.0.0-42.42.1
Event History
Frequently Asked Questions
What conditions are required to trigger this issue?
The issue involves sched_ext handling of a remotely activated task moved to a local dispatch queue. An immediate insertion into a busy destination must request a local reenqueue, while deferred actions are not subsequently run by an unrelated wakeup or preemption before the scheduler is disabled.
What is the practical impact if the deferred request remains pending?
The immediate task can remain queued behind the currently running task until deferred actions are processed. If the scheduler is disabled first, the pending request can outlive the scheduler and retain a pointer to freed per-CPU memory, which may be dereferenced by the next scheduler's run_deferred() call.
How is the issue corrected?
The fix derives SCX_RQ_IN_WAKEUP from the core enqueue flags and checks the core wakeup bit. This ensures the wakeup state is set only for the core wakeup path that is followed by task_woken_scx().