[Linux-stm32] [PATCH 1/2] hwrng: stm32 - fix number of returned bytes on read

Lionel DEBIEVE lionel.debieve at foss.st.com
Thu Oct 13 07:50:59 UTC 2022


On 10/12/22 18:09, Tomas Marek wrote:

> The stm32_rng_read() function uses `retval` variable as a counter of
> generated random bytes. However, the same variable is used to store
> a result of the polling function in case the driver is waiting until
> the TRNG is ready. The TRNG generates random numbers by 16B. One
> loop read 4B. So, the function calls the polling every 16B, i.e.
> every 4th loop. The `retval` counter is reset on poll call and only
> number of bytes read after the last poll call is returned to the
> caller. The remaining sampled random bytes (for example 48 out of
> 64 in case 64 bytes are read) are not used.
>
> Use different variable to store the polling function result and
> do not overwrite `retval` counter.
>
> Cc: Oleg Karfich<oleg.karfich at wago.com>
> Signed-off-by: Tomas Marek<tomas.marek at elrest.cz>
> ---
>   drivers/char/hw_random/stm32-rng.c | 6 ++++--
>   1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/char/hw_random/stm32-rng.c b/drivers/char/hw_random/stm32-rng.c
> index bc22178f83e8..8eaacefd498b 100644
> --- a/drivers/char/hw_random/stm32-rng.c
> +++ b/drivers/char/hw_random/stm32-rng.c
> @@ -49,11 +49,13 @@ static int stm32_rng_read(struct hwrng *rng, void *data, size_t max, bool wait)
>   		/* Manage timeout which is based on timer and take */
>   		/* care of initial delay time when enabling rng	*/
>   		if (!sr && wait) {
> -			retval = readl_relaxed_poll_timeout_atomic(priv->base
> +			int ret;
> +
> +			ret = readl_relaxed_poll_timeout_atomic(priv->base
>   								   + RNG_SR,
>   								   sr, sr,
>   								   10, 50000);
> -			if (retval)
> +			if (ret)
>   				dev_err((struct device *)priv->rng.priv,
>   					"%s: timeout %x!\n", __func__, sr);
>   		}

Reviewed-by: Lionel DEBIEVE<lionel.debieve at foss.st.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://st-md-mailman.stormreply.com/pipermail/linux-stm32/attachments/20221013/2bcb8162/attachment.html>


More information about the Linux-stm32 mailing list