watchdog: rti-wdt: fix reference leak in rti_wdt_probe

Message ID 20201030154909.100023-1-zhangqilong3@huawei.com
State New
Headers show
Series
  • watchdog: rti-wdt: fix reference leak in rti_wdt_probe
Related show

Commit Message

Zhang Qilong Oct. 30, 2020, 3:49 p.m.
pm_runtime_get_sync() will increment pm usage counter even it
failed. Forgetting to call pm_runtime_put_noidle will result
in reference leak in rti_wdt_probe, so we should fix it.

Signed-off-by: Zhang Qilong <zhangqilong3@huawei.com>
---
 drivers/watchdog/rti_wdt.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Guenter Roeck Oct. 30, 2020, 5:35 p.m. | #1
On Fri, Oct 30, 2020 at 11:49:09PM +0800, Zhang Qilong wrote:
> pm_runtime_get_sync() will increment pm usage counter even it

> failed. Forgetting to call pm_runtime_put_noidle will result

> in reference leak in rti_wdt_probe, so we should fix it.

> 

> Signed-off-by: Zhang Qilong <zhangqilong3@huawei.com>


Reviewed-by: Guenter Roeck <linux@roeck-us.net>


> ---

>  drivers/watchdog/rti_wdt.c | 4 +++-

>  1 file changed, 3 insertions(+), 1 deletion(-)

> 

> diff --git a/drivers/watchdog/rti_wdt.c b/drivers/watchdog/rti_wdt.c

> index 836319cbaca9..359302f71f7e 100644

> --- a/drivers/watchdog/rti_wdt.c

> +++ b/drivers/watchdog/rti_wdt.c

> @@ -227,8 +227,10 @@ static int rti_wdt_probe(struct platform_device *pdev)

>  

>  	pm_runtime_enable(dev);

>  	ret = pm_runtime_get_sync(dev);

> -	if (ret)

> +	if (ret) {

> +		pm_runtime_put_noidle(dev);

>  		return dev_err_probe(dev, ret, "runtime pm failed\n");

> +	}

>  

>  	platform_set_drvdata(pdev, wdt);

>  

> -- 

> 2.17.1

>

Patch

diff --git a/drivers/watchdog/rti_wdt.c b/drivers/watchdog/rti_wdt.c
index 836319cbaca9..359302f71f7e 100644
--- a/drivers/watchdog/rti_wdt.c
+++ b/drivers/watchdog/rti_wdt.c
@@ -227,8 +227,10 @@  static int rti_wdt_probe(struct platform_device *pdev)
 
 	pm_runtime_enable(dev);
 	ret = pm_runtime_get_sync(dev);
-	if (ret)
+	if (ret) {
+		pm_runtime_put_noidle(dev);
 		return dev_err_probe(dev, ret, "runtime pm failed\n");
+	}
 
 	platform_set_drvdata(pdev, wdt);