[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