clocksource/drivers/dw_apb_timer_of: Add handling for potential memory leak
Add calls to disable the clock and unmap the timer base address in case of any failures. Reported-by: kernel test robot <lkp@intel.com> Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Dinh Nguyen <dinguyen@kernel.org> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> Link: https://lore.kernel.org/r/20210322121844.2271041-1-dinguyen@kernel.org
This commit is contained in:
parent
690daddcb6
commit
397dc6f7ca
|
@ -52,18 +52,34 @@ static int __init timer_get_base_and_rate(struct device_node *np,
|
|||
return 0;
|
||||
|
||||
timer_clk = of_clk_get_by_name(np, "timer");
|
||||
if (IS_ERR(timer_clk))
|
||||
return PTR_ERR(timer_clk);
|
||||
if (IS_ERR(timer_clk)) {
|
||||
ret = PTR_ERR(timer_clk);
|
||||
goto out_pclk_disable;
|
||||
}
|
||||
|
||||
ret = clk_prepare_enable(timer_clk);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto out_timer_clk_put;
|
||||
|
||||
*rate = clk_get_rate(timer_clk);
|
||||
if (!(*rate))
|
||||
return -EINVAL;
|
||||
if (!(*rate)) {
|
||||
ret = -EINVAL;
|
||||
goto out_timer_clk_disable;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
out_timer_clk_disable:
|
||||
clk_disable_unprepare(timer_clk);
|
||||
out_timer_clk_put:
|
||||
clk_put(timer_clk);
|
||||
out_pclk_disable:
|
||||
if (!IS_ERR(pclk)) {
|
||||
clk_disable_unprepare(pclk);
|
||||
clk_put(pclk);
|
||||
}
|
||||
iounmap(*base);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int __init add_clockevent(struct device_node *event_timer)
|
||||
|
|
Loading…
Reference in New Issue