drivers/firmware/psci: Fix memory leakage in alloc_init_cpu_groups()
The CPU mask (@tmp) should be released on failing to allocate @cpu_groups or any of its elements. Otherwise, it leads to memory leakage because the CPU mask variable is dynamically allocated when CONFIG_CPUMASK_OFFSTACK is enabled. Signed-off-by: Gavin Shan <gshan@redhat.com> Reviewed-by: Sudeep Holla <sudeep.holla@arm.com> Link: https://lore.kernel.org/r/20200630075227.199624-1-gshan@redhat.com Signed-off-by: Will Deacon <will@kernel.org>
This commit is contained in:
parent
68cf617309
commit
c377e67c62
@ -157,8 +157,10 @@ static int alloc_init_cpu_groups(cpumask_var_t **pcpu_groups)
|
|||||||
|
|
||||||
cpu_groups = kcalloc(nb_available_cpus, sizeof(cpu_groups),
|
cpu_groups = kcalloc(nb_available_cpus, sizeof(cpu_groups),
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
if (!cpu_groups)
|
if (!cpu_groups) {
|
||||||
|
free_cpumask_var(tmp);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
}
|
||||||
|
|
||||||
cpumask_copy(tmp, cpu_online_mask);
|
cpumask_copy(tmp, cpu_online_mask);
|
||||||
|
|
||||||
@ -167,6 +169,7 @@ static int alloc_init_cpu_groups(cpumask_var_t **pcpu_groups)
|
|||||||
topology_core_cpumask(cpumask_any(tmp));
|
topology_core_cpumask(cpumask_any(tmp));
|
||||||
|
|
||||||
if (!alloc_cpumask_var(&cpu_groups[num_groups], GFP_KERNEL)) {
|
if (!alloc_cpumask_var(&cpu_groups[num_groups], GFP_KERNEL)) {
|
||||||
|
free_cpumask_var(tmp);
|
||||||
free_cpu_groups(num_groups, &cpu_groups);
|
free_cpu_groups(num_groups, &cpu_groups);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user