@@ -879,7 +879,9 @@ static void discard_queued_entropy(struct entropy_store *r,
spin_unlock_irqrestore(&r->lock, flags);
}
-struct health_test {};
+struct health_test {
+ u8 previous_sample;
+};
enum health_result {
health_none,
@@ -895,6 +897,16 @@ static enum health_result
health_test_process(struct health_test *h, unsigned int event_entropy_shift,
u8 sample)
{
+ u8 sample_delta;
+
+ /*
+ * The min-entropy estimate has been made for the lower eight
+ * bits of the deltas between cycle counter values from
+ * successive IRQ events.
+ */
+ sample_delta = sample - h->previous_sample;
+ h->previous_sample = sample;
+
return health_none;
}
The min-entropy estimate has been made for the lower eight bits of the deltas between cycle counter values from successive IRQ events and thus, the upcoming health tests should actually be run on these deltas. Introduce a new field ->previous_sample to struct health_test for storing the previous get_cycles() value. Make health_test_process() maintain it and also calculate the delta between the current and the previous value at this point already in preparation to passing it to the upcoming health tests. Note that ->previous_sample is deliberately not touched from health_test_reset() in order to maintain a steady flow of correctly calculated deltas across health test resets. Signed-off-by: Nicolai Stange <nstange@suse.de> --- drivers/char/random.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-)