On Thu, Sep 12, 2019 at 03:30:22PM +0200, Laurent Vivier wrote:
>
> @@ -496,19 +510,24 @@ int hwrng_register(struct hwrng *rng)
>                       goto out_unlock;
>       }
>  
> -     if (old_rng && !rng->init) {
> +     new_rng = rng;
> +     kref_get(&new_rng->ref);
> +out_unlock:
> +     mutex_unlock(&rng_mutex);
> +
> +     if (new_rng) {
> +             if (new_rng != old_rng || !rng->init) {

Is this really supposed to be || instead of &&?

>               /*
>                * Use a new device's input to add some randomness to
>                * the system.  If this rng device isn't going to be
>                * used right away, its init function hasn't been
> -              * called yet; so only use the randomness from devices
> -              * that don't need an init callback.
> +              * called yet by set_current_rng(); so only use the
> +              * randomness from devices that don't need an init callback
>                */
> -             add_early_randomness(rng);
> +                     add_early_randomness(new_rng);
> +             }
> +             put_rng(new_rng);
>       }

Cheers,
-- 
Email: Herbert Xu <herb...@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

Reply via email to