summaryrefslogtreecommitdiff
path: root/init/main.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2019-05-07 21:42:23 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2019-05-07 21:42:23 -0700
commitdd5001e21a991b731d659857cd07acc7a13e6789 (patch)
tree42dd4fa7386242e4d728307519dbc6d9435c3575 /init/main.c
parenta9fbcd6728837268784439ad0b02ede2c024c516 (diff)
parentb7d5dc21072cda7124d13eae2aefb7343ef94197 (diff)
downloadlwn-dd5001e21a991b731d659857cd07acc7a13e6789.tar.gz
lwn-dd5001e21a991b731d659857cd07acc7a13e6789.zip
Merge tag 'random_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/random
Pull randomness updates from Ted Ts'o: - initialize the random driver earler - fix CRNG initialization when we trust the CPU's RNG on NUMA systems - other miscellaneous cleanups and fixes. * tag 'random_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/random: random: add a spinlock_t to struct batched_entropy random: document get_random_int() family random: fix CRNG initialization when random.trust_cpu=1 random: move rand_initialize() earlier random: only read from /dev/random after its pool has received 128 bits drivers/char/random.c: make primary_crng static drivers/char/random.c: remove unused stuct poolinfo::poolbits drivers/char/random.c: constify poolinfo_table
Diffstat (limited to 'init/main.c')
-rw-r--r--init/main.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/init/main.c b/init/main.c
index efe6d62e3846..33c87e91dc37 100644
--- a/init/main.c
+++ b/init/main.c
@@ -569,13 +569,6 @@ asmlinkage __visible void __init start_kernel(void)
page_address_init();
pr_notice("%s", linux_banner);
setup_arch(&command_line);
- /*
- * Set up the the initial canary and entropy after arch
- * and after adding latent and command line entropy.
- */
- add_latent_entropy();
- add_device_randomness(command_line, strlen(command_line));
- boot_init_stack_canary();
mm_init_cpumask(&init_mm);
setup_command_line(command_line);
setup_nr_cpu_ids();
@@ -660,6 +653,20 @@ asmlinkage __visible void __init start_kernel(void)
hrtimers_init();
softirq_init();
timekeeping_init();
+
+ /*
+ * For best initial stack canary entropy, prepare it after:
+ * - setup_arch() for any UEFI RNG entropy and boot cmdline access
+ * - timekeeping_init() for ktime entropy used in rand_initialize()
+ * - rand_initialize() to get any arch-specific entropy like RDRAND
+ * - add_latent_entropy() to get any latent entropy
+ * - adding command line entropy
+ */
+ rand_initialize();
+ add_latent_entropy();
+ add_device_randomness(command_line, strlen(command_line));
+ boot_init_stack_canary();
+
time_init();
printk_safe_init();
perf_event_init();