aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-01-16 18:23:09 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2012-01-16 18:23:09 -0800
commitc2bc3a316a7281f67e36b34dac2802cbe36a9128 (patch)
tree53e0b78ac25109b71c47bf47f4cdbb35ef1e7e36
parent5674124f9f16f196533abb383193bd232c9afc2f (diff)
parent2dac8e54f988ab58525505d7ef982493374433c3 (diff)
Merge branch 'x86/rdrand' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
* 'x86/rdrand' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: random: Adjust the number of loops when initializing random: Use arch-specific RNG to initialize the entropy store
-rw-r--r--drivers/char/random.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/char/random.c b/drivers/char/random.c
index 732215b805c..54ca8b23cde 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -965,6 +965,7 @@ EXPORT_SYMBOL(get_random_bytes);
*/
static void init_std_data(struct entropy_store *r)
{
+ int i;
ktime_t now;
unsigned long flags;
@@ -974,6 +975,11 @@ static void init_std_data(struct entropy_store *r)
now = ktime_get_real();
mix_pool_bytes(r, &now, sizeof(now));
+ for (i = r->poolinfo->POOLBYTES; i > 0; i -= sizeof flags) {
+ if (!arch_get_random_long(&flags))
+ break;
+ mix_pool_bytes(r, &flags, sizeof(flags));
+ }
mix_pool_bytes(r, utsname(), sizeof(*(utsname())));
}