pmdomain: core: Reset genpd->states to avoid freeing invalid data

[ Upstream commit 99012014c902cd9ad85fd288d8a107f33a69855e ]

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
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Ulf Hansson
2025-04-02 14:06:13 +02:00
committed by Greg Kroah-Hartman
parent 02de16babe
commit 33cd650d38

View File

@@ -2228,8 +2228,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);