Skip to content

Commit c01d4d0

Browse files
committed
random: quiet urandom warning ratelimit suppression message
random.c ratelimits how much it warns about uninitialized urandom reads using __ratelimit(). When the RNG is finally initialized, it prints the number of missed messages due to ratelimiting. It has been this way since that functionality was introduced back in 2018. Recently, cc1e127 ("random: remove ratelimiting for in-kernel unseeded randomness") put a bit more stress on the urandom ratelimiting, which teased out a bug in the implementation. Specifically, when under pressure, __ratelimit() will print its own message and reset the count back to 0, making the final message at the end less useful. Secondly, it does so as a pr_warn(), which apparently is undesirable for people's CI. Fortunately, __ratelimit() has the RATELIMIT_MSG_ON_RELEASE flag exactly for this purpose, so we set the flag. Fixes: 4e00b33 ("random: rate limit unseeded randomness warnings") Cc: [email protected] Reported-by: Jon Hunter <[email protected]> Reported-by: Ron Economos <[email protected]> Tested-by: Ron Economos <[email protected]> Signed-off-by: Jason A. Donenfeld <[email protected]>
1 parent 534d2ea commit c01d4d0

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

drivers/char/random.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ static struct fasync_struct *fasync;
8787

8888
/* Control how we warn userspace. */
8989
static struct ratelimit_state urandom_warning =
90-
RATELIMIT_STATE_INIT("warn_urandom_randomness", HZ, 3);
90+
RATELIMIT_STATE_INIT_FLAGS("urandom_warning", HZ, 3, RATELIMIT_MSG_ON_RELEASE);
9191
static int ratelimit_disable __read_mostly =
9292
IS_ENABLED(CONFIG_WARN_ALL_UNSEEDED_RANDOM);
9393
module_param_named(ratelimit_disable, ratelimit_disable, int, 0644);

include/linux/ratelimit_types.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,16 @@ struct ratelimit_state {
2323
unsigned long flags;
2424
};
2525

26-
#define RATELIMIT_STATE_INIT(name, interval_init, burst_init) { \
27-
.lock = __RAW_SPIN_LOCK_UNLOCKED(name.lock), \
28-
.interval = interval_init, \
29-
.burst = burst_init, \
26+
#define RATELIMIT_STATE_INIT_FLAGS(name, interval_init, burst_init, flags_init) { \
27+
.lock = __RAW_SPIN_LOCK_UNLOCKED(name.lock), \
28+
.interval = interval_init, \
29+
.burst = burst_init, \
30+
.flags = flags_init, \
3031
}
3132

33+
#define RATELIMIT_STATE_INIT(name, interval_init, burst_init) \
34+
RATELIMIT_STATE_INIT_FLAGS(name, interval_init, burst_init, 0)
35+
3236
#define RATELIMIT_STATE_INIT_DISABLED \
3337
RATELIMIT_STATE_INIT(ratelimit_state, 0, DEFAULT_RATELIMIT_BURST)
3438

0 commit comments

Comments
 (0)