CVE-2026-99105: sched_ext: Fix stall when a task enqueued with SCX_ENQ_LAST lands back on its CPU's local DSQ
In the Linux kernel, the following vulnerability has been resolved:
schedext: Fix stall when a task enqueued with SCXENQLAST lands back on its CPU's local DSQ
With SCXOPSENQLAST, the last runnable task on a CPU is passed to ops.enqueue() instead of being kept running. Exiting tasks without SCXOPSENQEXITING, migration disabled tasks without SCXOPSENQMIGRATIONDISABLED and tasks on an offline rq skip ops.enqueue() and go straight to the local DSQ. This happens in putprevtaskscx() after the pick has settled on idle, so nothing reschedules the CPU, which idles with the task queued until an unrelated wakeup lands on it or the watchdog fires.
scxmitosis, which sets SCXOPSENQLAST without SCXOPSENQEXITING, hit this during mass cgroup teardown: exiting tasks stuck in exitmmap() for over 40 seconds.
A task put on the local DSQ runs, as anywhere else. If the SCXENQLAST enqueue left the task on this CPU's local DSQ, set needresched on the task being switched in, as proxyreschedidle() does. reschedcurr() would flag the task being put instead, and schedule() clears that right after the pick.