Linux: cpufreq: zero-initialize policy cpumask before sysfs publication
What fixes it
- 06f273d29e5e0fe5c775a65c563fbeed8cd94c7aLinuxCVE List
- 0de2f3918fbbbb767e7e716178194b66560dd12aLinuxCVE List
- 6e166b9281dec98aed19213a84235250e5fdb081LinuxCVE List
- 54d37bcf2f497140b9207968557ddb484058e749LinuxCVE List
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
In the Linux kernel, the following vulnerability has been resolved:
cpufreq: zero-initialize policy cpumask before sysfs publication
cpufreq_policy_alloc() allocates policy->cpus with alloc_cpumask_var(), i.e. without __GFP_ZERO, unlike the sibling related_cpus and real_cpus masks. With CONFIG_CPUMASK_OFFSTACK=y the mask is a separate kmalloc_node() allocation, so its bitmap holds whatever the slab allocator left behind:
cpufreq_online() cpufreq_policy_alloc() alloc_cpumask_var(&policy->cpus) /* bitmap is uninitialized */ kobject_init_and_add() /* policy%u/ appears in sysfs */ cpufreq_policy_online() cpumask_copy(policy->cpus, cpumask_of(cpu)) /* first valid value */
This leaves a window in which the sysfs attributes are already reachable while policy->cpus is still garbage. show()/store() gate on policy_is_inactive(), i.e. cpumask_empty(policy->cpus), so a non-zero bitmap makes them run the attribute callbacks on a policy that is not initialized yet.
Fix this by using zalloc_cpumask_var() for policy->cpus.
Text from CVE List
Affected versions 18
- Linuxaffected: 2fc3384dc75bf7333384c7a16d12c796f61c3f56 before e13370c5b549712f49f80234df249303381c53b4CVE List
- Linuxaffected: 2fc3384dc75bf7333384c7a16d12c796f61c3f56 before e807920031ca32b668f9e7a1efbd21858f03d64bCVE List
- Linuxaffected: 2fc3384dc75bf7333384c7a16d12c796f61c3f56 before ca52482508b3ac9febe74ca4f732647d394727b8CVE List
- Linuxaffected: 2fc3384dc75bf7333384c7a16d12c796f61c3f56 before 06f273d29e5e0fe5c775a65c563fbeed8cd94c7aCVE List
- Linuxaffected: 2fc3384dc75bf7333384c7a16d12c796f61c3f56 before 0de2f3918fbbbb767e7e716178194b66560dd12aCVE List
- Linuxaffected: 2fc3384dc75bf7333384c7a16d12c796f61c3f56 before 6e166b9281dec98aed19213a84235250e5fdb081CVE List
- Linuxaffected: 2fc3384dc75bf7333384c7a16d12c796f61c3f56 before bbc0472d2270bf732142ca71579d6ede636174edCVE List
- Linuxaffected: 2fc3384dc75bf7333384c7a16d12c796f61c3f56 before 54d37bcf2f497140b9207968557ddb484058e749CVE List
- Linuxaffected: 4.2CVE List
- Linuxunaffected: all versions before 4.2CVE List
- Linuxunaffected: 5.10.271 through 5.10.*CVE List
- Linuxunaffected: 5.15.222 through 5.15.*CVE List
- Linuxunaffected: 6.1.189 through 6.1.*CVE List
- Linuxunaffected: 6.6.158 through 6.6.*CVE List
- Linuxunaffected: 6.12.111 through 6.12.*CVE List
- Linuxunaffected: 6.18.53 through 6.18.*CVE List
- Linuxunaffected: 7.2.7 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List
References 8
- git.kernel.org/stable/c/e13370c5b549712f49f80234df249303381c53b4Referencevia CVE List
- git.kernel.org/stable/c/e807920031ca32b668f9e7a1efbd21858f03d64bReferencevia CVE List
- git.kernel.org/stable/c/ca52482508b3ac9febe74ca4f732647d394727b8Referencevia CVE List
- git.kernel.org/stable/c/06f273d29e5e0fe5c775a65c563fbeed8cd94c7aReferencevia CVE List
- git.kernel.org/stable/c/0de2f3918fbbbb767e7e716178194b66560dd12aReferencevia CVE List
- git.kernel.org/stable/c/6e166b9281dec98aed19213a84235250e5fdb081Referencevia CVE List
- git.kernel.org/stable/c/bbc0472d2270bf732142ca71579d6ede636174edReferencevia CVE List
- git.kernel.org/stable/c/54d37bcf2f497140b9207968557ddb484058e749Referencevia CVE List