|
@@ -964,7 +964,6 @@ static ssize_t extract_crng_user(void __user *buf, size_t nbytes)
|
|
struct timer_rand_state {
|
|
struct timer_rand_state {
|
|
cycles_t last_time;
|
|
cycles_t last_time;
|
|
long last_delta, last_delta2;
|
|
long last_delta, last_delta2;
|
|
- unsigned dont_count_entropy:1;
|
|
|
|
};
|
|
};
|
|
|
|
|
|
#define INIT_TIMER_RAND_STATE { INITIAL_JIFFIES, };
|
|
#define INIT_TIMER_RAND_STATE { INITIAL_JIFFIES, };
|
|
@@ -1030,35 +1029,33 @@ static void add_timer_randomness(struct timer_rand_state *state, unsigned num)
|
|
* We take into account the first, second and third-order deltas
|
|
* We take into account the first, second and third-order deltas
|
|
* in order to make our estimate.
|
|
* in order to make our estimate.
|
|
*/
|
|
*/
|
|
|
|
+ delta = sample.jiffies - state->last_time;
|
|
|
|
+ state->last_time = sample.jiffies;
|
|
|
|
+
|
|
|
|
+ delta2 = delta - state->last_delta;
|
|
|
|
+ state->last_delta = delta;
|
|
|
|
+
|
|
|
|
+ delta3 = delta2 - state->last_delta2;
|
|
|
|
+ state->last_delta2 = delta2;
|
|
|
|
+
|
|
|
|
+ if (delta < 0)
|
|
|
|
+ delta = -delta;
|
|
|
|
+ if (delta2 < 0)
|
|
|
|
+ delta2 = -delta2;
|
|
|
|
+ if (delta3 < 0)
|
|
|
|
+ delta3 = -delta3;
|
|
|
|
+ if (delta > delta2)
|
|
|
|
+ delta = delta2;
|
|
|
|
+ if (delta > delta3)
|
|
|
|
+ delta = delta3;
|
|
|
|
|
|
- if (!state->dont_count_entropy) {
|
|
|
|
- delta = sample.jiffies - state->last_time;
|
|
|
|
- state->last_time = sample.jiffies;
|
|
|
|
-
|
|
|
|
- delta2 = delta - state->last_delta;
|
|
|
|
- state->last_delta = delta;
|
|
|
|
-
|
|
|
|
- delta3 = delta2 - state->last_delta2;
|
|
|
|
- state->last_delta2 = delta2;
|
|
|
|
-
|
|
|
|
- if (delta < 0)
|
|
|
|
- delta = -delta;
|
|
|
|
- if (delta2 < 0)
|
|
|
|
- delta2 = -delta2;
|
|
|
|
- if (delta3 < 0)
|
|
|
|
- delta3 = -delta3;
|
|
|
|
- if (delta > delta2)
|
|
|
|
- delta = delta2;
|
|
|
|
- if (delta > delta3)
|
|
|
|
- delta = delta3;
|
|
|
|
|
|
+ /*
|
|
|
|
+ * delta is now minimum absolute delta.
|
|
|
|
+ * Round down by 1 bit on general principles,
|
|
|
|
+ * and limit entropy entimate to 12 bits.
|
|
|
|
+ */
|
|
|
|
+ credit_entropy_bits(r, min_t(int, fls(delta>>1), 11));
|
|
|
|
|
|
- /*
|
|
|
|
- * delta is now minimum absolute delta.
|
|
|
|
- * Round down by 1 bit on general principles,
|
|
|
|
- * and limit entropy entimate to 12 bits.
|
|
|
|
- */
|
|
|
|
- credit_entropy_bits(r, min_t(int, fls(delta>>1), 11));
|
|
|
|
- }
|
|
|
|
preempt_enable();
|
|
preempt_enable();
|
|
}
|
|
}
|
|
|
|
|