lkml.org 
[lkml]   [2022]   [Oct]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 6.0 652/862] random: schedule jitter credit for next jiffy, not in two jiffies
    Date
    From: Jason A. Donenfeld <Jason@zx2c4.com>

    [ Upstream commit 122733471384be8c23f019fbbd46bdf7be561dcd ]

    Counterintuitively, mod_timer(..., jiffies + 1) will cause the timer to
    fire not in the next jiffy, but in two jiffies. The way to cause
    the timer to fire in the next jiffy is with mod_timer(..., jiffies).
    Doing so then lets us bump the upper bound back up again.

    Fixes: 50ee7529ec45 ("random: try to actively add entropy rather than passively wait for it")
    Fixes: 829d680e82a9 ("random: cap jitter samples per bit to factor of HZ")
    Cc: Dominik Brodowski <linux@dominikbrodowski.net>
    Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Cc: Sultan Alsawaf <sultan@kerneltoast.com>
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/char/random.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    diff --git a/drivers/char/random.c b/drivers/char/random.c
    index 060f999dcffb..46d6100fa3a7 100644
    --- a/drivers/char/random.c
    +++ b/drivers/char/random.c
    @@ -1195,7 +1195,7 @@ static void __cold entropy_timer(struct timer_list *timer)
    */
    static void __cold try_to_generate_entropy(void)
    {
    - enum { NUM_TRIAL_SAMPLES = 8192, MAX_SAMPLES_PER_BIT = HZ / 30 };
    + enum { NUM_TRIAL_SAMPLES = 8192, MAX_SAMPLES_PER_BIT = HZ / 15 };
    struct entropy_timer_state stack;
    unsigned int i, num_different = 0;
    unsigned long last = random_get_entropy();
    @@ -1214,7 +1214,7 @@ static void __cold try_to_generate_entropy(void)
    timer_setup_on_stack(&stack.timer, entropy_timer, 0);
    while (!crng_ready() && !signal_pending(current)) {
    if (!timer_pending(&stack.timer))
    - mod_timer(&stack.timer, jiffies + 1);
    + mod_timer(&stack.timer, jiffies);
    mix_pool_bytes(&stack.entropy, sizeof(stack.entropy));
    schedule();
    stack.entropy = random_get_entropy();
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-10-19 11:31    [W:3.487 / U:0.144 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site