lkml.org 
[lkml]   [2022]   [Jun]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 035/264] random: make CPU trust a boot parameter
    Date
    From: Kees Cook <keescook@chromium.org>

    commit 9b25436662d5fb4c66eb527ead53cab15f596ee0 upstream.

    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 <keescook@chromium.org>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    Documentation/kernel-parameters.txt | 6 ++++++
    drivers/char/Kconfig | 4 ++--
    drivers/char/random.c | 11 ++++++++---
    3 files changed, 16 insertions(+), 5 deletions(-)

    --- a/Documentation/kernel-parameters.txt
    +++ b/Documentation/kernel-parameters.txt
    @@ -3577,6 +3577,12 @@ bytes respectively. Such letter suffixes
    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.
    +
    rcu_nocbs= [KNL]
    The argument is a cpu list, as described above.

    --- a/drivers/char/Kconfig
    +++ b/drivers/char/Kconfig
    @@ -607,5 +607,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".
    --- a/drivers/char/random.c
    +++ b/drivers/char/random.c
    @@ -780,6 +780,13 @@ static struct crng_state **crng_node_poo

    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;
    @@ -800,12 +807,10 @@ static void crng_initialize(struct 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;
    }


    \
     
     \ /
      Last update: 2022-06-23 18:50    [W:4.027 / U:0.576 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site