summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-01-17 03:23:09 +0100
committerLinus Torvalds <torvalds@linux-foundation.org>2012-01-17 03:23:09 +0100
commitc2bc3a316a7281f67e36b34dac2802cbe36a9128 (patch)
tree53e0b78ac25109b71c47bf47f4cdbb35ef1e7e36
parentMerge branch 'x86-syscall-for-linus' of git://git.kernel.org/pub/scm/linux/ke... (diff)
parentrandom: Adjust the number of loops when initializing (diff)
downloadlinux-c2bc3a316a7281f67e36b34dac2802cbe36a9128.tar.xz
linux-c2bc3a316a7281f67e36b34dac2802cbe36a9128.zip
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 732215b805c1..54ca8b23cde3 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())));
}