random: initialize the last_time field in struct timer_rand_state
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>
This commit is contained in:
parent
ae9ecd92dd
commit
644008df89
|
@ -724,6 +724,8 @@ struct timer_rand_state {
|
||||||
unsigned dont_count_entropy:1;
|
unsigned dont_count_entropy:1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define INIT_TIMER_RAND_STATE { INITIAL_JIFFIES, };
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Add device- or boot-specific data to the input and nonblocking
|
* Add device- or boot-specific data to the input and nonblocking
|
||||||
* pools to help initialize them to unique values.
|
* 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);
|
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
|
* This function adds entropy to the entropy "pool" by using timing
|
||||||
|
@ -1267,8 +1269,10 @@ void rand_initialize_disk(struct gendisk *disk)
|
||||||
* source.
|
* source.
|
||||||
*/
|
*/
|
||||||
state = kzalloc(sizeof(struct timer_rand_state), GFP_KERNEL);
|
state = kzalloc(sizeof(struct timer_rand_state), GFP_KERNEL);
|
||||||
if (state)
|
if (state) {
|
||||||
|
state->last_time = INITIAL_JIFFIES;
|
||||||
disk->random = state;
|
disk->random = state;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue