In the Linux kernel, the following vulnerability has been resolved:
sched/deadline: only set free_cpus for online runqueues
Commit 16b269436b72 ("sched/deadline: Modify cpudl::freecpus to reflect rd->online") introduced the cpudlset/clearfreecpu functions to allow the cpudl::freecpus mask to be manipulated by the deadline scheduler class rqon/offline callbacks so the mask would also reflect this state.
Commit 9659e1eeee28 ("sched/deadline: Remove cpuactivemask from cpudlfind()") removed the check of the cpuactivemask to save some processing on the premise that the cpudl::freecpus mask already reflected the runqueue online state.
Unfortunately, there are cases where it is possible for the cpudlclear function to set the freecpus bit for a CPU when the deadline runqueue is offline. When this occurs while a CPU is connected to the default root domain the flag may retain the bad state after the CPU has been unplugged. Later, a different CPU that is transitioning through the default root domain may push a deadline task to the powered down CPU when cpudlfind sees its freecpus bit is set. If this happens the task will not have the opportunity to run.
One example is outlined here: https://lore.kernel.org/lkml/20250110233010.2339521-1-opendmb@gmail.com
Another occurs when the last deadline task is migrated from a CPU that has an offlined runqueue. The dequeuetask member of the deadline scheduler class will eventually call cpudlclear and set the free_cpus bit for the CPU.
This commit modifies the cpudlclear function to be aware of the online state of the deadline runqueue so that the freecpus mask can be updated appropriately.
It is no longer necessary to manage the mask outside of the cpudlset/clear functions so the cpudlset/clearfreecpu functions are removed. In addition, since the freecpus mask is now only updated under the cpudl lock the code was changed to use the non-atomic __cpumask functions.
{
"cna_assigner": "Linux",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2025/68xxx/CVE-2025-68780.json"
}