• J
    random: avoid initializing twice in credit race · fed7ef06
    Jason A. Donenfeld 提交于
    Since all changes of crng_init now go through credit_init_bits(), we can
    fix a long standing race in which two concurrent callers of
    credit_init_bits() have the new bit count >= some threshold, but are
    doing so with crng_init as a lower threshold, checked outside of a lock,
    resulting in crng_reseed() or similar being called twice.
    
    In order to fix this, we can use the original cmpxchg value of the bit
    count, and only change crng_init when the bit count transitions from
    below a threshold to meeting the threshold.
    Reviewed-by: NDominik Brodowski <linux@dominikbrodowski.net>
    Signed-off-by: NJason A. Donenfeld <Jason@zx2c4.com>
    fed7ef06
random.c 50.1 KB