drivers/firmware/psci: Fix memory leakage in alloc_init_cpu_groups()
[ Upstream commit c377e67c62
]
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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
5.4-rM2-2.2.x-imx-squashed
parent
d0e40e510a
commit
96002e7485
|
@ -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