random: inline leaves of rand_initialize()
commit 8566417221fcec51346ec164e920dacb979c6b5f upstream. 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> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
70377ee074
commit
c521bf08ee
@@ -476,42 +476,6 @@ static DECLARE_WAIT_QUEUE_HEAD(crng_init_wait);
|
|||||||
|
|
||||||
static void invalidate_batched_entropy(void);
|
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
|
* 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
|
* 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);
|
EXPORT_SYMBOL(get_random_bytes_arch);
|
||||||
|
|
||||||
/*
|
static bool trust_cpu __ro_after_init = IS_ENABLED(CONFIG_RANDOM_TRUST_CPU);
|
||||||
* init_std_data - initialize pool with system data
|
static int __init parse_trust_cpu(char *arg)
|
||||||
*
|
|
||||||
* 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)
|
|
||||||
{
|
{
|
||||||
int i;
|
return kstrtobool(arg, &trust_cpu);
|
||||||
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())));
|
|
||||||
}
|
}
|
||||||
|
early_param("random.trust_cpu", parse_trust_cpu);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Note that setup_arch() may call add_device_randomness()
|
* 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)
|
int __init rand_initialize(void)
|
||||||
{
|
{
|
||||||
init_std_data();
|
int i;
|
||||||
crng_initialize();
|
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) {
|
if (ratelimit_disable) {
|
||||||
urandom_warning.interval = 0;
|
urandom_warning.interval = 0;
|
||||||
unseeded_warning.interval = 0;
|
unseeded_warning.interval = 0;
|
||||||
|
Reference in New Issue
Block a user