mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
hwrng: cctrng - Fix runtime PM usage counter leak
pm_runtime_get_sync() increments the device usage counter even when
runtime resume fails. cctrng_read() propagates errors from
cc_trng_pm_get() without scheduling the work that later drops the
counter, so a clock or reset-completion failure in cctrng_resume()
leaves the counter elevated.
Use pm_runtime_resume_and_get(), which drops the usage counter when
resume fails and returns zero on success. This preserves the existing
success path while balancing the error path.
This issue was found by a static analysis checker and confirmed by
manual source review.
Fixes: a583ed310b ("hwrng: cctrng - introduce Arm CryptoCell driver")
Signed-off-by: Ruoyu Wang <ruoyuw560@gmail.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
3244eef8b5
commit
58d27c4154
|
|
@ -86,12 +86,7 @@ static inline u32 cc_ioread(struct cctrng_drvdata *drvdata, u32 reg)
|
|||
|
||||
static int cc_trng_pm_get(struct device *dev)
|
||||
{
|
||||
int rc = 0;
|
||||
|
||||
rc = pm_runtime_get_sync(dev);
|
||||
|
||||
/* pm_runtime_get_sync() can return 1 as a valid return code */
|
||||
return (rc == 1 ? 0 : rc);
|
||||
return pm_runtime_resume_and_get(dev);
|
||||
}
|
||||
|
||||
static void cc_trng_pm_put_suspend(struct device *dev)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user