mirror of
https://gitee.com/bianbu-linux/linux-6.6
synced 2025-07-04 00:03:25 -04:00
random: credit architectural init the exact amount
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>
This commit is contained in:
parent
2f14062bb1
commit
12e45a2a63
1 changed files with 6 additions and 6 deletions
|
@ -927,9 +927,8 @@ static struct notifier_block pm_notifier = { .notifier_call = random_pm_notifica
|
||||||
*/
|
*/
|
||||||
int __init random_init(const char *command_line)
|
int __init random_init(const char *command_line)
|
||||||
{
|
{
|
||||||
size_t i;
|
|
||||||
ktime_t now = ktime_get_real();
|
ktime_t now = ktime_get_real();
|
||||||
bool arch_init = true;
|
unsigned int i, arch_bytes;
|
||||||
unsigned long rv;
|
unsigned long rv;
|
||||||
|
|
||||||
#if defined(LATENT_ENTROPY_PLUGIN)
|
#if defined(LATENT_ENTROPY_PLUGIN)
|
||||||
|
@ -937,11 +936,12 @@ int __init random_init(const char *command_line)
|
||||||
_mix_pool_bytes(compiletime_seed, sizeof(compiletime_seed));
|
_mix_pool_bytes(compiletime_seed, sizeof(compiletime_seed));
|
||||||
#endif
|
#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) &&
|
if (!arch_get_random_seed_long_early(&rv) &&
|
||||||
!arch_get_random_long_early(&rv)) {
|
!arch_get_random_long_early(&rv)) {
|
||||||
rv = random_get_entropy();
|
rv = random_get_entropy();
|
||||||
arch_init = false;
|
arch_bytes -= sizeof(rv);
|
||||||
}
|
}
|
||||||
_mix_pool_bytes(&rv, sizeof(rv));
|
_mix_pool_bytes(&rv, sizeof(rv));
|
||||||
}
|
}
|
||||||
|
@ -952,8 +952,8 @@ int __init random_init(const char *command_line)
|
||||||
|
|
||||||
if (crng_ready())
|
if (crng_ready())
|
||||||
crng_reseed();
|
crng_reseed();
|
||||||
else if (arch_init && trust_cpu)
|
else if (trust_cpu)
|
||||||
credit_init_bits(BLAKE2S_BLOCK_SIZE * 8);
|
credit_init_bits(arch_bytes * 8);
|
||||||
|
|
||||||
WARN_ON(register_pm_notifier(&pm_notifier));
|
WARN_ON(register_pm_notifier(&pm_notifier));
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue