random: Make CPU trust a boot parameter
Subsystems (3)
PATCH 1/1 random: Make CPU trust a boot parameter
Instead of forcing a distro or other system builder to choose at build time whether the CPU is trusted for CRNG seeding via CONFIG_RANDOM_TRUST_CPU, provide a boot-time parameter for end users to control the choice. The CONFIG will set the default state instead.
Signed-off-by Kees Cook <[email protected]>
--- Documentation/admin-guide/kernel-parameters.txt | 6 ++++++ drivers/char/Kconfig | 4 ++-- drivers/char/random.c | 11 ++++++++--- 3 files changed, 16 insertions(+), 5 deletions(-)
Documentation/admin-guide/kernel-parameters.txt +6 -0
@@ -3523,6 +3523,12 @@ ramdisk_size= [RAM] Sizes of RAM disks in kilobytes See Documentation/blockdev/ramdisk.txt. + random.trust_cpu={on,off} + [KNL] Enable or disable trusting the use of the + CPU's random number generator (if available) to + fully seed the kernel's CRNG. Default is controlled + by CONFIG_RANDOM_TRUST_CPU. + ras=option[,option,...] [KNL] RAS-specific options cec_disable [X86]
drivers/char/Kconfig +2 -2
@@ -566,5 +566,5 @@ config RANDOM_TRUST_CPU that CPU manufacturer (perhaps with the insistence or mandate of a Nation State's intelligence or law enforcement agencies) has not installed a hidden back door to compromise the CPU's - random number generation facilities. - + random number generation facilities. This can also be configured + at boot with "random.trust_cpu=on/off".
drivers/char/random.c +8 -3
@@ -779,6 +779,13 @@ static struct crng_state **crng_node_pool __read_mostly;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 void crng_initialize (struct crng_state *crng) {int i;
@@ -799,12 +806,10 @@ static void crng_initialize(struct crng_state *crng) } crng->state[i] ^= rv; } -#ifdef CONFIG_RANDOM_TRUST_CPU -if (arch_init) { +if (trust_cpu && arch_init) { crng_init =2 ;pr_notice ("random: crng done (trusting CPU's manufacturer)\n" ); } -#endif crng->init_time = jiffies -CRNG_RESEED_INTERVAL -1 ; }
Signature · 6 lines
2.17.1 -- Kees Cook Pixel Security