cpufreq: davinci: Fix clk use after free
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Wed, 8 Feb 2023 09:26:54 +0000 (10:26 +0100)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 9 Feb 2023 19:26:42 +0000 (20:26 +0100)
The remove function first frees the clks and only then calls
cpufreq_unregister_driver(). If one of the cpufreq callbacks is called
just before cpufreq_unregister_driver() is run, the freed clks might be
used.

Fixes: 6601b8030de3 ("davinci: add generic CPUFreq driver for DaVinci")
Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/cpufreq/davinci-cpufreq.c

index 2d23015e2abde85f8f1b90893a76c7f0826076b7..ebb3a81026816f905d500b7ce6d771bef0d775af 100644 (file)
@@ -133,13 +133,13 @@ static int __init davinci_cpufreq_probe(struct platform_device *pdev)
 
 static int __exit davinci_cpufreq_remove(struct platform_device *pdev)
 {
+       cpufreq_unregister_driver(&davinci_driver);
+
        clk_put(cpufreq.armclk);
 
        if (cpufreq.asyncclk)
                clk_put(cpufreq.asyncclk);
 
-       cpufreq_unregister_driver(&davinci_driver);
-
        return 0;
 }