2022-02-22 14:51:03

by Jason A. Donenfeld

[permalink] [raw]
Subject: [PATCH] random: only wake up writers after zap if threshold was passed

The only time that we need to wake up /dev/random writers on
RNDCLEARPOOL/RNDZAPPOOL is when we're changing from a value that is
greater than or equal to POOL_MIN_BITS to zero, because if we're
changing from below POOL_MIN_BITS to zero, the writers are already
unblocked.

Cc: Dominik Brodowski <[email protected]>
Cc: Theodore Ts'o <[email protected]>
Signed-off-by: Jason A. Donenfeld <[email protected]>
---
drivers/char/random.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/char/random.c b/drivers/char/random.c
index a4dedeea35e9..536237a0f073 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -1582,7 +1582,7 @@ static long random_ioctl(struct file *f, unsigned int cmd, unsigned long arg)
*/
if (!capable(CAP_SYS_ADMIN))
return -EPERM;
- if (xchg(&input_pool.entropy_count, 0)) {
+ if (xchg(&input_pool.entropy_count, 0) >= POOL_MIN_BITS) {
wake_up_interruptible(&random_write_wait);
kill_fasync(&fasync, SIGIO, POLL_OUT);
}
--
2.35.1


2022-02-24 08:13:23

by Dominik Brodowski

[permalink] [raw]
Subject: Re: [PATCH] random: only wake up writers after zap if threshold was passed

Am Tue, Feb 22, 2022 at 02:05:03PM +0100 schrieb Jason A. Donenfeld:
> The only time that we need to wake up /dev/random writers on
> RNDCLEARPOOL/RNDZAPPOOL is when we're changing from a value that is
> greater than or equal to POOL_MIN_BITS to zero, because if we're
> changing from below POOL_MIN_BITS to zero, the writers are already
> unblocked.
>
> Cc: Dominik Brodowski <[email protected]>
> Cc: Theodore Ts'o <[email protected]>
> Signed-off-by: Jason A. Donenfeld <[email protected]>

Reviewed-by: Dominik Brodowski <[email protected]>

Thanks,
Dominik