crypto: rng - ensure that the RNG is ready before using
authorJason A. Donenfeld <Jason@zx2c4.com>
Sun, 16 Jul 2017 17:22:06 +0000 (19:22 +0200)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 28 Jul 2017 09:56:00 +0000 (17:56 +0800)
Otherwise, we might be seeding the RNG using bad randomness, which is
dangerous. The one use of this function from within the kernel -- not
from userspace -- is being removed (keys/big_key), so that call site
isn't relevant in assessing this.

Cc: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
crypto/rng.c

index 5e84692..b4a6186 100644 (file)
@@ -43,12 +43,14 @@ int crypto_rng_reset(struct crypto_rng *tfm, const u8 *seed, unsigned int slen)
                if (!buf)
                        return -ENOMEM;
 
-               get_random_bytes(buf, slen);
+               err = get_random_bytes_wait(buf, slen);
+               if (err)
+                       goto out;
                seed = buf;
        }
 
        err = crypto_rng_alg(tfm)->seed(tfm, seed, slen);
-
+out:
        kzfree(buf);
        return err;
 }