Commit 3e88bdff1c65145f7ba297ccec69c774afe4c785
Committed by
H. Peter Anvin
1 parent
cf833d0b99
Exists in
master
and in
6 other branches
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 |