diff options
author | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2023-09-08 09:49:07 +0200 |
---|---|---|
committer | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2023-09-08 09:49:07 +0200 |
commit | a903049858c1cc991759ffdd2aaabf9157374e11 (patch) | |
tree | a6e7561ccbdc204802179e18fdb9ae2aac84fc4c | |
parent | f15052e68d43bdad8d8a125a3601ff8cedcf5a3d (diff) | |
download | VeraCrypt-a903049858c1cc991759ffdd2aaabf9157374e11.tar.gz VeraCrypt-a903049858c1cc991759ffdd2aaabf9157374e11.zip |
Linux/macOS: simplify logic of handling /dev/random reading failure (proposed by @Lavode in #1187)
Fixes #1187
-rw-r--r-- | src/Core/RandomNumberGenerator.cpp | 26 | ||||
-rw-r--r-- | src/Core/RandomNumberGenerator.h | 1 |
2 files changed, 11 insertions, 16 deletions
diff --git a/src/Core/RandomNumberGenerator.cpp b/src/Core/RandomNumberGenerator.cpp index 4451348e..6b401901 100644 --- a/src/Core/RandomNumberGenerator.cpp +++ b/src/Core/RandomNumberGenerator.cpp @@ -54,22 +54,20 @@ namespace VeraCrypt { int rndCount = read (random, buffer, buffer.Size()); throw_sys_sub_if ((rndCount == -1) && errno != EAGAIN && errno != ERESTART && errno != EINTR, L"/dev/random"); - if (rndCount == -1 && (!DevRandomSucceeded || (DevRandomBytesCount < 32))) - { - // wait 250ms before querying /dev/random again - ::usleep (250 * 1000); + if (rndCount != -1) { + // We count returned bytes until 32-bytes threshold reached + if (DevRandomBytesCount < 32) + DevRandomBytesCount += rndCount; + break; } - else - { - if (rndCount != -1) - { - // We count returned bytes untill 32-bytes treshold reached - if (DevRandomBytesCount < 32) - DevRandomBytesCount += rndCount; - DevRandomSucceeded = true; - } + else if (DevRandomBytesCount >= 32) { + // allow /dev/random to fail gracefully since we have enough bytes break; } + else { + // wait 250ms before querying /dev/random again + ::usleep (250 * 1000); + } } AddToPool (buffer); @@ -253,7 +251,6 @@ namespace VeraCrypt EnrichedByUser = false; Running = false; - DevRandomSucceeded = false; DevRandomBytesCount = 0; } @@ -292,6 +289,5 @@ namespace VeraCrypt bool RandomNumberGenerator::Running = false; size_t RandomNumberGenerator::WriteOffset; struct rand_data *RandomNumberGenerator::JitterRngCtx = NULL; - bool RandomNumberGenerator::DevRandomSucceeded = false; int RandomNumberGenerator::DevRandomBytesCount = 0; } diff --git a/src/Core/RandomNumberGenerator.h b/src/Core/RandomNumberGenerator.h index 8f440630..333a8e36 100644 --- a/src/Core/RandomNumberGenerator.h +++ b/src/Core/RandomNumberGenerator.h @@ -55,7 +55,6 @@ namespace VeraCrypt static bool Running; static size_t WriteOffset; static struct rand_data *JitterRngCtx; - static bool DevRandomSucceeded; static int DevRandomBytesCount; }; } |