|
@@ -782,6 +782,7 @@ static void invalidate_batched_entropy(void);
|
|
|
static void crng_initialize(struct crng_state *crng)
|
|
|
{
|
|
|
int i;
|
|
|
+ int arch_init = 1;
|
|
|
unsigned long rv;
|
|
|
|
|
|
memcpy(&crng->state[0], "expand 32-byte k", 16);
|
|
@@ -792,10 +793,18 @@ static void crng_initialize(struct crng_state *crng)
|
|
|
_get_random_bytes(&crng->state[4], sizeof(__u32) * 12);
|
|
|
for (i = 4; i < 16; i++) {
|
|
|
if (!arch_get_random_seed_long(&rv) &&
|
|
|
- !arch_get_random_long(&rv))
|
|
|
+ !arch_get_random_long(&rv)) {
|
|
|
rv = random_get_entropy();
|
|
|
+ arch_init = 0;
|
|
|
+ }
|
|
|
crng->state[i] ^= rv;
|
|
|
}
|
|
|
+#ifdef CONFIG_RANDOM_TRUST_CPU
|
|
|
+ if (arch_init) {
|
|
|
+ crng_init = 2;
|
|
|
+ pr_notice("random: crng done (trusting CPU's manufacturer)\n");
|
|
|
+ }
|
|
|
+#endif
|
|
|
crng->init_time = jiffies - CRNG_RESEED_INTERVAL - 1;
|
|
|
}
|
|
|
|