]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
pmdomain: core: Reset genpd->states to avoid freeing invalid data
authorUlf Hansson <ulf.hansson@linaro.org>
Wed, 2 Apr 2025 12:06:13 +0000 (14:06 +0200)
committerUlf Hansson <ulf.hansson@linaro.org>
Wed, 23 Apr 2025 08:08:34 +0000 (10:08 +0200)
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
drivers/pmdomain/core.c

index 3327de2f9ed231479689de4ef72316d1a6426b37..3523d0331cec6c538184399e52239098e2ae2241 100644 (file)
@@ -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);