crypto: jitter - quit sample collection loop upon RCT failure
The jitterentropy collection loop in jent_gen_entropy() can in principle run indefinitely without making any progress if it only receives stuck measurements as determined by jent_stuck(). After 31 consecutive stuck samples, the Repetition Count Test (RCT) would fail anyway and the jitterentropy RNG instances moved into ->health_failure == 1 state. jent_gen_entropy()'s caller, jent_read_entropy() would then check for this ->health_failure condition and return an error if found set. It follows that there's absolutely no point in continuing the collection loop in jent_gen_entropy() once the RCT has failed. Make the jitterentropy collection loop more robust by terminating it upon jent_health_failure() so that it won't continue to run indefinitely without making any progress. Signed-off-by: Nicolai Stange <nstange@suse.de> Reviewed-by: Stephan Mueller <smueller@chronox.de> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
committed by
Herbert Xu
parent
b454fb7025
commit
710ce4b88f
@@ -547,7 +547,7 @@ static void jent_gen_entropy(struct rand_data *ec)
|
|||||||
/* priming of the ->prev_time value */
|
/* priming of the ->prev_time value */
|
||||||
jent_measure_jitter(ec);
|
jent_measure_jitter(ec);
|
||||||
|
|
||||||
while (1) {
|
while (!jent_health_failure(ec)) {
|
||||||
/* If a stuck measurement is received, repeat measurement */
|
/* If a stuck measurement is received, repeat measurement */
|
||||||
if (jent_measure_jitter(ec))
|
if (jent_measure_jitter(ec))
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
Reference in New Issue
Block a user