mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 02:50:49 +09:00
random: credit architectural init the exact amount
commit 12e45a2a63 upstream.
RDRAND and RDSEED can fail sometimes, which is fine. We currently
initialize the RNG with 512 bits of RDRAND/RDSEED. We only need 256 bits
of those to succeed in order to initialize the RNG. Instead of the
current "all or nothing" approach, actually credit these contributions
the amount that is actually contributed.
Reviewed-by: Dominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Chris
parent
c901c7cf3a
commit
17b72df2e5
@@ -892,9 +892,8 @@ early_param("random.trust_bootloader", parse_trust_bootloader);
|
||||
*/
|
||||
int __init random_init(const char *command_line)
|
||||
{
|
||||
size_t i;
|
||||
ktime_t now = ktime_get_real();
|
||||
bool arch_init = true;
|
||||
unsigned int i, arch_bytes;
|
||||
unsigned long rv;
|
||||
|
||||
#if defined(LATENT_ENTROPY_PLUGIN)
|
||||
@@ -902,11 +901,12 @@ int __init random_init(const char *command_line)
|
||||
_mix_pool_bytes(compiletime_seed, sizeof(compiletime_seed));
|
||||
#endif
|
||||
|
||||
for (i = 0; i < BLAKE2S_BLOCK_SIZE; i += sizeof(rv)) {
|
||||
for (i = 0, arch_bytes = BLAKE2S_BLOCK_SIZE;
|
||||
i < BLAKE2S_BLOCK_SIZE; i += sizeof(rv)) {
|
||||
if (!arch_get_random_seed_long_early(&rv) &&
|
||||
!arch_get_random_long_early(&rv)) {
|
||||
rv = random_get_entropy();
|
||||
arch_init = false;
|
||||
arch_bytes -= sizeof(rv);
|
||||
}
|
||||
_mix_pool_bytes(&rv, sizeof(rv));
|
||||
}
|
||||
@@ -917,8 +917,8 @@ int __init random_init(const char *command_line)
|
||||
|
||||
if (crng_ready())
|
||||
crng_reseed();
|
||||
else if (arch_init && trust_cpu)
|
||||
credit_init_bits(BLAKE2S_BLOCK_SIZE * 8);
|
||||
else if (trust_cpu)
|
||||
credit_init_bits(arch_bytes * 8);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user