summaryrefslogtreecommitdiffstats
path: root/drivers/char
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2022-05-05 02:20:22 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2022-06-25 11:49:11 +0200
commit94a51ffecb5ac98319681e809fb8c95b1ebec90e (patch)
treed5b67dadc488f6e4fd366aa35f6b797577ea3b79 /drivers/char
parentbbe663a632cf7a03bdda249fc9a18e40bb8311dc (diff)
downloadlinux-stable-94a51ffecb5ac98319681e809fb8c95b1ebec90e.tar.gz
linux-stable-94a51ffecb5ac98319681e809fb8c95b1ebec90e.tar.bz2
linux-stable-94a51ffecb5ac98319681e809fb8c95b1ebec90e.zip
random: handle latent entropy and command line from random_init()
commit 2f14062bb14b0fcfcc21e6dc7d5b5c0d25966164 upstream. Currently, start_kernel() adds latent entropy and the command line to the entropy bool *after* the RNG has been initialized, deferring when it's actually used by things like stack canaries until the next time the pool is seeded. This surely is not intended. Rather than splitting up which entropy gets added where and when between start_kernel() and random_init(), just do everything in random_init(), which should eliminate these kinds of bugs in the future. While we're at it, rename the awkwardly titled "rand_initialize()" to the more standard "random_init()" nomenclature. 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>
Diffstat (limited to 'drivers/char')
-rw-r--r--drivers/char/random.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/char/random.c b/drivers/char/random.c
index 87d188527ec9..aea780a987a0 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -883,12 +883,13 @@ early_param("random.trust_bootloader", parse_trust_bootloader);
/*
* The first collection of entropy occurs at system boot while interrupts
- * are still turned off. Here we push in RDSEED, a timestamp, and utsname().
- * Depending on the above configuration knob, RDSEED may be considered
- * sufficient for initialization. Note that much earlier setup may already
- * have pushed entropy into the input pool by the time we get here.
+ * are still turned off. Here we push in latent entropy, RDSEED, a timestamp,
+ * utsname(), and the command line. Depending on the above configuration knob,
+ * RDSEED may be considered sufficient for initialization. Note that much
+ * earlier setup may already have pushed entropy into the input pool by the
+ * time we get here.
*/
-int __init rand_initialize(void)
+int __init random_init(const char *command_line)
{
size_t i;
ktime_t now = ktime_get_real();
@@ -910,6 +911,8 @@ int __init rand_initialize(void)
}
_mix_pool_bytes(&now, sizeof(now));
_mix_pool_bytes(utsname(), sizeof(*(utsname())));
+ _mix_pool_bytes(command_line, strlen(command_line));
+ add_latent_entropy();
if (crng_ready())
crng_reseed();