diff options
author | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2019-10-30 08:45:01 +0100 |
---|---|---|
committer | Mounir IDRASSI <mounir.idrassi@idrix.fr> | 2019-10-30 08:53:03 +0100 |
commit | 5ecff99edc9c342987ef59156c2358a4c24ce9b5 (patch) | |
tree | 96c5db33afa9394231f91669b6e2de4873892a40 | |
parent | 7a35ecb154fc979d46dea8d97d0ad97fd4ae4140 (diff) | |
download | VeraCrypt-5ecff99edc9c342987ef59156c2358a4c24ce9b5.tar.gz VeraCrypt-5ecff99edc9c342987ef59156c2358a4c24ce9b5.zip |
Add check for buggy RDRAND (AMD Ryzen CPU case) even if we always use RDSEED instead of RDRAND when RDSEED is available (which is the case on modern CPUs)
-rw-r--r-- | src/Crypto/cpu.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/Crypto/cpu.c b/src/Crypto/cpu.c index 62574983..33a9815e 100644 --- a/src/Crypto/cpu.c +++ b/src/Crypto/cpu.c @@ -2,6 +2,7 @@ #include "cpu.h" #include "misc.h" +#include "rdrand.h" #ifndef EXCEPTION_EXECUTE_HANDLER #define EXCEPTION_EXECUTE_HANDLER 1 @@ -387,6 +388,18 @@ void DetectX86Features() } } + /* Add check fur buggy RDRAND (AMD Ryzen case) even if we always use RDSEED instead of RDRAND when RDSEED available */ + if (g_hasRDRAND) + { + if ( RDRAND_getBytes ((unsigned char*) cpuid, sizeof (cpuid)) + && (cpuid[0] == 0xFFFFFFFF) && (cpuid[1] == 0xFFFFFFFF) + && (cpuid[2] == 0xFFFFFFFF) && (cpuid[3] == 0xFFFFFFFF) + ) + { + g_hasRDRAND = 0; + } + } + if (!g_cacheLineSize) g_cacheLineSize = CRYPTOPP_L1_CACHE_LINE_SIZE; |