random: mix in cycle counter when jitter timer fires

Message ID 20221130021633.300422-1-Jason@zx2c4.com
State New
Headers
Series random: mix in cycle counter when jitter timer fires |

Commit Message

Jason A. Donenfeld Nov. 30, 2022, 2:16 a.m. UTC
  Rather than just relying on interaction between cache lines of the timer
and the main loop, also explicitly take into account the fact that the
timer might fire at some time that's hard to predict, due to scheduling,
interrupts, or cross-CPU conditions. Mix in a cycle counter during the
firing of the timer, in addition to the existing one during the
scheduling of the timer. It can't hurt and can only help.

Cc: Dominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
---
 drivers/char/random.c | 2 ++
 1 file changed, 2 insertions(+)
  

Patch

diff --git a/drivers/char/random.c b/drivers/char/random.c
index 2494e08c76d8..69ea6cb14a86 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -1250,7 +1250,9 @@  struct entropy_timer_state {
 static void __cold entropy_timer(struct timer_list *timer)
 {
 	struct entropy_timer_state *state = container_of(timer, struct entropy_timer_state, timer);
+	unsigned long entropy = random_get_entropy();
 
+	mix_pool_bytes(&entropy, sizeof(entropy));
 	if (atomic_inc_return(&state->samples) % state->samples_per_bit == 0)
 		credit_init_bits(1);
 }