diff --git a/drivers/char/random.c b/drivers/char/random.c index f13bb9cfbb13..2e4666ad883e 100644 --- a/drivers/char/random.c +++ b/drivers/char/random.c @@ -128,10 +128,11 @@ int wait_for_random_bytes(void) { while (!crng_ready()) { int ret; + + try_to_generate_entropy(); ret = wait_event_interruptible_timeout(crng_init_wait, crng_ready(), HZ); if (ret) return ret > 0 ? 0 : ret; - try_to_generate_entropy(); } return 0; } @@ -1367,7 +1368,7 @@ static void try_to_generate_entropy(void) return; __setup_timer_on_stack(&stack.timer, entropy_timer, 0, 0); - while (!crng_ready()) { + while (!crng_ready() && !signal_pending(current)) { if (!timer_pending(&stack.timer)) mod_timer(&stack.timer, jiffies + 1); mix_pool_bytes(&stack.cycles, sizeof(stack.cycles));