random: inline leaves of rand_initialize()
This is a preparatory commit for the following one. We simply inline the various functions that rand_initialize() calls that have no other callers. The compiler was doing this anyway before. Doing this will allow us to reorganize this after. We can then move the trust_cpu and parse_trust_cpu definitions a bit closer to where they're actually used, which makes the code easier to read. Cc: Theodore Ts'o <tytso@mit.edu> Reviewed-by: Dominik Brodowski <linux@dominikbrodowski.net> Reviewed-by: Eric Biggers <ebiggers@google.com> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
parent
a9412d510a
commit
8566417221
@ -476,42 +476,6 @@ static DECLARE_WAIT_QUEUE_HEAD(crng_init_wait);
|
||||
|
||||
static void invalidate_batched_entropy(void);
|
||||
|
||||
static bool trust_cpu __ro_after_init = IS_ENABLED(CONFIG_RANDOM_TRUST_CPU);
|
||||
static int __init parse_trust_cpu(char *arg)
|
||||
{
|
||||
return kstrtobool(arg, &trust_cpu);
|
||||
}
|
||||
early_param("random.trust_cpu", parse_trust_cpu);
|
||||
|
||||
static bool __init crng_init_try_arch_early(void)
|
||||
{
|
||||
int i;
|
||||
bool arch_init = true;
|
||||
unsigned long rv;
|
||||
|
||||
for (i = 4; i < 16; i++) {
|
||||
if (!arch_get_random_seed_long_early(&rv) &&
|
||||
!arch_get_random_long_early(&rv)) {
|
||||
rv = random_get_entropy();
|
||||
arch_init = false;
|
||||
}
|
||||
primary_crng.state[i] ^= rv;
|
||||
}
|
||||
|
||||
return arch_init;
|
||||
}
|
||||
|
||||
static void __init crng_initialize(void)
|
||||
{
|
||||
extract_entropy(&primary_crng.state[4], sizeof(u32) * 12);
|
||||
if (crng_init_try_arch_early() && trust_cpu && crng_init < 2) {
|
||||
invalidate_batched_entropy();
|
||||
crng_init = 2;
|
||||
pr_notice("crng init done (trusting CPU's manufacturer)\n");
|
||||
}
|
||||
primary_crng.init_time = jiffies - CRNG_RESEED_INTERVAL - 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* crng_fast_load() can be called by code in the interrupt service
|
||||
* path. So we can't afford to dilly-dally. Returns the number of
|
||||
@ -1220,28 +1184,12 @@ int __must_check get_random_bytes_arch(void *buf, int nbytes)
|
||||
}
|
||||
EXPORT_SYMBOL(get_random_bytes_arch);
|
||||
|
||||
/*
|
||||
* init_std_data - initialize pool with system data
|
||||
*
|
||||
* This function clears the pool's entropy count and mixes some system
|
||||
* data into the pool to prepare it for use. The pool is not cleared
|
||||
* as that can only decrease the entropy in the pool.
|
||||
*/
|
||||
static void __init init_std_data(void)
|
||||
static bool trust_cpu __ro_after_init = IS_ENABLED(CONFIG_RANDOM_TRUST_CPU);
|
||||
static int __init parse_trust_cpu(char *arg)
|
||||
{
|
||||
int i;
|
||||
ktime_t now = ktime_get_real();
|
||||
unsigned long rv;
|
||||
|
||||
mix_pool_bytes(&now, sizeof(now));
|
||||
for (i = BLAKE2S_BLOCK_SIZE; i > 0; i -= sizeof(rv)) {
|
||||
if (!arch_get_random_seed_long(&rv) &&
|
||||
!arch_get_random_long(&rv))
|
||||
rv = random_get_entropy();
|
||||
mix_pool_bytes(&rv, sizeof(rv));
|
||||
}
|
||||
mix_pool_bytes(utsname(), sizeof(*(utsname())));
|
||||
return kstrtobool(arg, &trust_cpu);
|
||||
}
|
||||
early_param("random.trust_cpu", parse_trust_cpu);
|
||||
|
||||
/*
|
||||
* Note that setup_arch() may call add_device_randomness()
|
||||
@ -1255,8 +1203,36 @@ static void __init init_std_data(void)
|
||||
*/
|
||||
int __init rand_initialize(void)
|
||||
{
|
||||
init_std_data();
|
||||
crng_initialize();
|
||||
int i;
|
||||
ktime_t now = ktime_get_real();
|
||||
bool arch_init = true;
|
||||
unsigned long rv;
|
||||
|
||||
mix_pool_bytes(&now, sizeof(now));
|
||||
for (i = BLAKE2S_BLOCK_SIZE; i > 0; i -= sizeof(rv)) {
|
||||
if (!arch_get_random_seed_long(&rv) &&
|
||||
!arch_get_random_long(&rv))
|
||||
rv = random_get_entropy();
|
||||
mix_pool_bytes(&rv, sizeof(rv));
|
||||
}
|
||||
mix_pool_bytes(utsname(), sizeof(*(utsname())));
|
||||
|
||||
extract_entropy(&primary_crng.state[4], sizeof(u32) * 12);
|
||||
for (i = 4; i < 16; i++) {
|
||||
if (!arch_get_random_seed_long_early(&rv) &&
|
||||
!arch_get_random_long_early(&rv)) {
|
||||
rv = random_get_entropy();
|
||||
arch_init = false;
|
||||
}
|
||||
primary_crng.state[i] ^= rv;
|
||||
}
|
||||
if (arch_init && trust_cpu && crng_init < 2) {
|
||||
invalidate_batched_entropy();
|
||||
crng_init = 2;
|
||||
pr_notice("crng init done (trusting CPU's manufacturer)\n");
|
||||
}
|
||||
primary_crng.init_time = jiffies - CRNG_RESEED_INTERVAL - 1;
|
||||
|
||||
if (ratelimit_disable) {
|
||||
urandom_warning.interval = 0;
|
||||
unseeded_warning.interval = 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user