The notifier isn't unregistered if something fails after the registration,
move it to the end of probe to fix the potential use-after-free problem.

Signed-off-by: Dmitry Osipenko <dig...@gmail.com>
---
 drivers/devfreq/tegra-devfreq.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/devfreq/tegra-devfreq.c b/drivers/devfreq/tegra-devfreq.c
index aa0478464b35..c248c18431d9 100644
--- a/drivers/devfreq/tegra-devfreq.c
+++ b/drivers/devfreq/tegra-devfreq.c
@@ -647,14 +647,6 @@ static int tegra_devfreq_probe(struct platform_device 
*pdev)
                return PTR_ERR(tegra->emc_clock);
        }
 
-       tegra->rate_change_nb.notifier_call = tegra_actmon_rate_notify_cb;
-       err = clk_notifier_register(tegra->emc_clock, &tegra->rate_change_nb);
-       if (err) {
-               dev_err(&pdev->dev,
-                       "Failed to register rate change notifier\n");
-               return err;
-       }
-
        reset_control_assert(tegra->reset);
 
        err = clk_prepare_enable(tegra->clock);
@@ -712,6 +704,14 @@ static int tegra_devfreq_probe(struct platform_device 
*pdev)
                return err;
        }
 
+       tegra->rate_change_nb.notifier_call = tegra_actmon_rate_notify_cb;
+       err = clk_notifier_register(tegra->emc_clock, &tegra->rate_change_nb);
+       if (err) {
+               dev_err(&pdev->dev,
+                       "Failed to register rate change notifier\n");
+               return err;
+       }
+
        return 0;
 }
 
-- 
2.21.0

Reply via email to