| From 3e12ca325abfb157533613ff65f04b4cd33120e2 Mon Sep 17 00:00:00 2001 |
| From: Gavin Shan <gshan@redhat.com> |
| Date: Tue, 30 Jun 2020 17:52:27 +1000 |
| Subject: [PATCH] drivers/firmware/psci: Fix memory leakage in |
| alloc_init_cpu_groups() |
| |
| commit c377e67c6271954969384f9be1b1b71de13eba30 upstream. |
| |
| 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: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/firmware/psci/psci_checker.c b/drivers/firmware/psci/psci_checker.c |
| index f3659443f8c2..d89c0dd5159a 100644 |
| --- a/drivers/firmware/psci/psci_checker.c |
| +++ b/drivers/firmware/psci/psci_checker.c |
| @@ -157,8 +157,10 @@ static int alloc_init_cpu_groups(cpumask_var_t **pcpu_groups) |
| |
| cpu_groups = kcalloc(nb_available_cpus, sizeof(cpu_groups), |
| GFP_KERNEL); |
| - if (!cpu_groups) |
| + if (!cpu_groups) { |
| + free_cpumask_var(tmp); |
| return -ENOMEM; |
| + } |
| |
| 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)); |
| |
| if (!alloc_cpumask_var(&cpu_groups[num_groups], GFP_KERNEL)) { |
| + free_cpumask_var(tmp); |
| free_cpu_groups(num_groups, &cpu_groups); |
| return -ENOMEM; |
| } |
| -- |
| 2.27.0 |
| |