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.19 161/234] random: credit architectural init the exact amount
    Date
    From: "Jason A. Donenfeld" <Jason@zx2c4.com>

    commit 12e45a2a6308105469968951e6d563e8f4fea187 upstream.

    RDRAND and RDSEED can fail sometimes, which is fine. We currently
    initialize the RNG with 512 bits of RDRAND/RDSEED. We only need 256 bits
    of those to succeed in order to initialize the RNG. Instead of the
    current "all or nothing" approach, actually credit these contributions
    the amount that is actually contributed.

    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>
    ---
    drivers/char/random.c | 12 ++++++------
    1 file changed, 6 insertions(+), 6 deletions(-)

    --- a/drivers/char/random.c
    +++ b/drivers/char/random.c
    @@ -891,9 +891,8 @@ early_param("random.trust_bootloader", p
    */
    int __init random_init(const char *command_line)
    {
    - size_t i;
    ktime_t now = ktime_get_real();
    - bool arch_init = true;
    + unsigned int i, arch_bytes;
    unsigned long rv;

    #if defined(LATENT_ENTROPY_PLUGIN)
    @@ -901,11 +900,12 @@ int __init random_init(const char *comma
    _mix_pool_bytes(compiletime_seed, sizeof(compiletime_seed));
    #endif

    - for (i = 0; i < BLAKE2S_BLOCK_SIZE; i += sizeof(rv)) {
    + for (i = 0, arch_bytes = BLAKE2S_BLOCK_SIZE;
    + i < BLAKE2S_BLOCK_SIZE; i += sizeof(rv)) {
    if (!arch_get_random_seed_long_early(&rv) &&
    !arch_get_random_long_early(&rv)) {
    rv = random_get_entropy();
    - arch_init = false;
    + arch_bytes -= sizeof(rv);
    }
    _mix_pool_bytes(&rv, sizeof(rv));
    }
    @@ -916,8 +916,8 @@ int __init random_init(const char *comma

    if (crng_ready())
    crng_reseed();
    - else if (arch_init && trust_cpu)
    - credit_init_bits(BLAKE2S_BLOCK_SIZE * 8);
    + else if (trust_cpu)
    + credit_init_bits(arch_bytes * 8);

    return 0;
    }

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