lkml.org 
[lkml]   [2022]   [Jun]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 064/240] random: only call crng_finalize_init() for primary_crng
    Date
    From: Dominik Brodowski <linux@dominikbrodowski.net>

    commit 9d5505f1eebeca778074a0260ed077fd85f8792c upstream.

    crng_finalize_init() returns instantly if it is called for another pool
    than primary_crng. The test whether crng_finalize_init() is still required
    can be moved to the relevant caller in crng_reseed(), and
    crng_need_final_init can be reset to false if crng_finalize_init() is
    called with workqueues ready. Then, no previous callsite will call
    crng_finalize_init() unless it is needed, and we can get rid of the
    superfluous function parameter.

    Signed-off-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 | 10 +++++-----
    1 file changed, 5 insertions(+), 5 deletions(-)

    --- a/drivers/char/random.c
    +++ b/drivers/char/random.c
    @@ -800,10 +800,8 @@ static void __init crng_initialize_prima
    primary_crng.init_time = jiffies - CRNG_RESEED_INTERVAL - 1;
    }

    -static void crng_finalize_init(struct crng_state *crng)
    +static void crng_finalize_init(void)
    {
    - if (crng != &primary_crng || crng_init >= 2)
    - return;
    if (!system_wq) {
    /* We can't call numa_crng_init until we have workqueues,
    * so mark this for processing later. */
    @@ -814,6 +812,7 @@ static void crng_finalize_init(struct cr
    invalidate_batched_entropy();
    numa_crng_init();
    crng_init = 2;
    + crng_need_final_init = false;
    process_random_ready_list();
    wake_up_interruptible(&crng_init_wait);
    kill_fasync(&fasync, SIGIO, POLL_IN);
    @@ -980,7 +979,8 @@ static void crng_reseed(struct crng_stat
    memzero_explicit(&buf, sizeof(buf));
    WRITE_ONCE(crng->init_time, jiffies);
    spin_unlock_irqrestore(&crng->lock, flags);
    - crng_finalize_init(crng);
    + if (crng == &primary_crng && crng_init < 2)
    + crng_finalize_init();
    }

    static void _extract_crng(struct crng_state *crng, u8 out[CHACHA_BLOCK_SIZE])
    @@ -1697,7 +1697,7 @@ int __init rand_initialize(void)
    {
    init_std_data();
    if (crng_need_final_init)
    - crng_finalize_init(&primary_crng);
    + crng_finalize_init();
    crng_initialize_primary();
    crng_global_init_time = jiffies;
    if (ratelimit_disable) {

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