summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlf Hansson <ulf.hansson@linaro.org>2025-04-02 14:06:13 +0200
committerUlf Hansson <ulf.hansson@linaro.org>2025-04-23 10:08:34 +0200
commit99012014c902cd9ad85fd288d8a107f33a69855e (patch)
tree45648ae6bf2030c43b40385a5a0bdd86a6c8ffee
parent0a8a888167ddaaec7a292e5045782b8a240e6f3e (diff)
pmdomain: core: Reset genpd->states to avoid freeing invalid data
If genpd_alloc_data() allocates data for the default power-states for the genpd, let's make sure to also reset the pointer in the error path. This makes sure a genpd provider driver doesn't end up trying to free the data again, but using an invalid pointer. Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> Reviewed-by: Dhruva Gole <d-gole@ti.com> Link: https://lore.kernel.org/r/20250402120613.1116711-1-ulf.hansson@linaro.org
-rw-r--r--drivers/pmdomain/core.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/pmdomain/core.c b/drivers/pmdomain/core.c
index 3327de2f9ed2..3523d0331cec 100644
--- a/drivers/pmdomain/core.c
+++ b/drivers/pmdomain/core.c
@@ -2287,8 +2287,10 @@ static int genpd_alloc_data(struct generic_pm_domain *genpd)
return 0;
put:
put_device(&genpd->dev);
- if (genpd->free_states == genpd_free_default_power_state)
+ if (genpd->free_states == genpd_free_default_power_state) {
kfree(genpd->states);
+ genpd->states = NULL;
+ }
free:
if (genpd_is_cpu_domain(genpd))
free_cpumask_var(genpd->cpus);