• Jason A. Donenfeld's avatar
    random: absorb fast pool into input pool after fast load · c30c575d
    Jason A. Donenfeld authored
    During crng_init == 0, we never credit entropy in add_interrupt_
    randomness(), but instead dump it directly into the primary_crng. That's
    fine, except for the fact that we then wind up throwing away that
    entropy later when we switch to extracting from the input pool and
    xoring into (and later in this series overwriting) the primary_crng key.
    The two other early init sites -- add_hwgenerator_randomness()'s use
    crng_fast_load() and add_device_ randomness()'s use of crng_slow_load()
    -- always additionally give their inputs to the input pool. But not
    add_interrupt_randomness().
    
    This commit fixes that shortcoming by calling mix_pool_bytes() after
    crng_fast_load() in add_interrupt_randomness(). That's partially
    verboten on PREEMPT_RT, where it implies taking spinlock_t from an IRQ
    handler. But this also only happens during early boot and then never
    again after that. Plus it's a trylock so it has the same considerations
    as calling crng_fast_load(), which we're already using.
    
    Cc: Theodore Ts'o <tytso@mit.edu>
    Reviewed-by: default avatarDominik Brodowski <linux@dominikbrodowski.net>
    Reviewed-by: default avatarEric Biggers <ebiggers@google.com>
    Suggested-by: default avatarEric Biggers <ebiggers@google.com>
    Signed-off-by: default avatarJason A. Donenfeld <Jason@zx2c4.com>
    c30c575d
random.c 49.3 KB