Message ID | 20200613214128.32665-1-wu000273@umn.edu (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Herbert Xu |
Headers | show |
Series | char: hw_random: Fix a reference count leak. | expand |
On Sat, Jun 13, 2020 at 04:41:28PM -0500, wu000273@umn.edu wrote: > From: Qiushi Wu <wu000273@umn.edu> > > Calling pm_runtime_get_sync increments the counter even in case of > failure, causing incorrect ref count if pm_runtime_put_sync is not > called in error handling paths. Thus replace the jump target > "err_pm_get" by "err_clock". > > Fixes: 6cd225cc5d8a ("hwrng: exynos - add Samsung Exynos True RNG driver") > Signed-off-by: Qiushi Wu <wu000273@umn.edu> 1. Cc: <stable@vger.kernel.org> 2. Subject prefix: hwrng: exynos - 3. Subject title: Fix PM runtime reference count leak (no need for end stop) With these changes: Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org> Best regards, Krzysztof
It was <2020-06-13 sob 16:41>, when wu000273@umn.edu wrote: > From: Qiushi Wu <wu000273@umn.edu> > > Calling pm_runtime_get_sync increments the counter even in case of > failure, causing incorrect ref count if pm_runtime_put_sync is not > called in error handling paths. Thus replace the jump target > "err_pm_get" by "err_clock". > > Fixes: 6cd225cc5d8a ("hwrng: exynos - add Samsung Exynos True RNG driver") > Signed-off-by: Qiushi Wu <wu000273@umn.edu> > --- > drivers/char/hw_random/exynos-trng.c | 4 +--- > 1 file changed, 1 insertion(+), 3 deletions(-) > > diff --git a/drivers/char/hw_random/exynos-trng.c b/drivers/char/hw_random/exynos-trng.c > index 8e1fe3f8dd2d..ffa7e0f061f0 100644 > --- a/drivers/char/hw_random/exynos-trng.c > +++ b/drivers/char/hw_random/exynos-trng.c > @@ -135,7 +135,7 @@ static int exynos_trng_probe(struct platform_device *pdev) > ret = pm_runtime_get_sync(&pdev->dev); > if (ret < 0) { > dev_err(&pdev->dev, "Could not get runtime PM.\n"); > - goto err_pm_get; > + goto err_clock; > } > > trng->clk = devm_clk_get(&pdev->dev, "secss"); > @@ -166,8 +166,6 @@ static int exynos_trng_probe(struct platform_device *pdev) > > err_clock: > pm_runtime_put_sync(&pdev->dev); > - > -err_pm_get: > pm_runtime_disable(&pdev->dev); > > return ret; I believe this fix has already been submitted https://lore.kernel.org/linux-arm-kernel/20200522011659.26727-1-dinghao.liu@zju.edu.cn/T/#u It hasn't been applied though. Anyway, thank you for your work. Herbert, could you take a look at the Dinghao's patch, please?
On Mon, Jun 15, 2020 at 03:18:54PM +0200, Lukasz Stelmach wrote: > > I believe this fix has already been submitted > > https://lore.kernel.org/linux-arm-kernel/20200522011659.26727-1-dinghao.liu@zju.edu.cn/T/#u > > It hasn't been applied though. Anyway, thank you for your work. > > Herbert, could you take a look at the Dinghao's patch, please? It was part of a number of patches that did similar things. The general conclusion was that it should call put_noidle instead. See https://patchwork.kernel.org/patch/11574843/ Cheers,
diff --git a/drivers/char/hw_random/exynos-trng.c b/drivers/char/hw_random/exynos-trng.c index 8e1fe3f8dd2d..ffa7e0f061f0 100644 --- a/drivers/char/hw_random/exynos-trng.c +++ b/drivers/char/hw_random/exynos-trng.c @@ -135,7 +135,7 @@ static int exynos_trng_probe(struct platform_device *pdev) ret = pm_runtime_get_sync(&pdev->dev); if (ret < 0) { dev_err(&pdev->dev, "Could not get runtime PM.\n"); - goto err_pm_get; + goto err_clock; } trng->clk = devm_clk_get(&pdev->dev, "secss"); @@ -166,8 +166,6 @@ static int exynos_trng_probe(struct platform_device *pdev) err_clock: pm_runtime_put_sync(&pdev->dev); - -err_pm_get: pm_runtime_disable(&pdev->dev); return ret;