]> Pileus Git - ~andy/linux/commitdiff
random: initialize the last_time field in struct timer_rand_state
authorTheodore Ts'o <tytso@mit.edu>
Sun, 3 Nov 2013 21:40:53 +0000 (16:40 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Sun, 3 Nov 2013 23:20:05 +0000 (18:20 -0500)
Since we initialize jiffies to wrap five minutes before boot (see
INITIAL_JIFFIES defined in include/linux/jiffies.h) it's important to
make sure the last_time field is initialized to INITIAL_JIFFIES.
Otherwise, the entropy estimator will overestimate the amount of
entropy resulting from the first call to add_timer_randomness(),
generally by about 8 bits.

Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
drivers/char/random.c

index a38d97a21455de23097777ba5c46062c1cbfc2cd..0894d86253fdb2e1a1fcbc03206427c2c0120892 100644 (file)
@@ -724,6 +724,8 @@ struct timer_rand_state {
        unsigned dont_count_entropy:1;
 };
 
+#define INIT_TIMER_RAND_STATE { INITIAL_JIFFIES, };
+
 /*
  * Add device- or boot-specific data to the input and nonblocking
  * pools to help initialize them to unique values.
@@ -750,7 +752,7 @@ void add_device_randomness(const void *buf, unsigned int size)
 }
 EXPORT_SYMBOL(add_device_randomness);
 
-static struct timer_rand_state input_timer_state;
+static struct timer_rand_state input_timer_state = INIT_TIMER_RAND_STATE;
 
 /*
  * This function adds entropy to the entropy "pool" by using timing
@@ -1267,8 +1269,10 @@ void rand_initialize_disk(struct gendisk *disk)
         * source.
         */
        state = kzalloc(sizeof(struct timer_rand_state), GFP_KERNEL);
-       if (state)
+       if (state) {
+               state->last_time = INITIAL_JIFFIES;
                disk->random = state;
+       }
 }
 #endif