4.14-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Alexey Khoroshilov <[email protected]>

[ Upstream commit d66e53649c18377edc08d48901e658e4fd491d46 ]

clk_disable_unprepare() was added to one error path,
but there is another one. The patch makes sure clk is
disabled at the both of them.

Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: Alexey Khoroshilov <[email protected]>
Reviewed-by: Guenter Roeck <[email protected]>
Signed-off-by: Guenter Roeck <[email protected]>
Signed-off-by: Wim Van Sebroeck <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
---
 drivers/watchdog/davinci_wdt.c |   15 +++++++++++----
 1 file changed, 11 insertions(+), 4 deletions(-)

--- a/drivers/watchdog/davinci_wdt.c
+++ b/drivers/watchdog/davinci_wdt.c
@@ -198,15 +198,22 @@ static int davinci_wdt_probe(struct plat
 
        wdt_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        davinci_wdt->base = devm_ioremap_resource(dev, wdt_mem);
-       if (IS_ERR(davinci_wdt->base))
-               return PTR_ERR(davinci_wdt->base);
+       if (IS_ERR(davinci_wdt->base)) {
+               ret = PTR_ERR(davinci_wdt->base);
+               goto err_clk_disable;
+       }
 
        ret = watchdog_register_device(wdd);
-       if (ret < 0) {
-               clk_disable_unprepare(davinci_wdt->clk);
+       if (ret) {
                dev_err(dev, "cannot register watchdog device\n");
+               goto err_clk_disable;
        }
 
+       return 0;
+
+err_clk_disable:
+       clk_disable_unprepare(davinci_wdt->clk);
+
        return ret;
 }
 


Reply via email to