Commit 3e88bdff1c65145f7ba297ccec69c774afe4c785

Authored by Theodore Ts'o
Committed by H. Peter Anvin
1 parent cf833d0b99

random: Use arch-specific RNG to initialize the entropy store

If there is an architecture-specific random number generator (such as
RDRAND for Intel architectures), use it to initialize /dev/random's
entropy stores.  Even in the worst case, if RDRAND is something like
AES(NSA_KEY, counter++), it won't hurt, and it will definitely help
against any other adversaries.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Link: http://lkml.kernel.org/r/1324589281-31931-1-git-send-email-tytso@mit.edu
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>

Showing 1 changed file with 6 additions and 0 deletions Side-by-side Diff

drivers/char/random.c
... ... @@ -965,6 +965,7 @@
965 965 */
966 966 static void init_std_data(struct entropy_store *r)
967 967 {
  968 + int i;
968 969 ktime_t now;
969 970 unsigned long flags;
970 971  
... ... @@ -974,6 +975,11 @@
974 975  
975 976 now = ktime_get_real();
976 977 mix_pool_bytes(r, &now, sizeof(now));
  978 + for (i = r->poolinfo->poolwords; i; i--) {
  979 + if (!arch_get_random_long(&flags))
  980 + break;
  981 + mix_pool_bytes(r, &flags, sizeof(flags));
  982 + }
977 983 mix_pool_bytes(r, utsname(), sizeof(*(utsname())));
978 984 }
979 985