Use x86 highest basic before calling a leaf function

This was a latent bug that just surfaced on a Sun Core2 workstation. RDSEED caused an illegal instruction exception on the Core2. It seems we managed to miss it because old processors had family and stepping values so low they never set CPUID.EBX.RDSEED[bit 18] = 1. Newer processors had the feature so CPUID.EBX.RDSEED[bit 18] = 1 was accurate.
This commit is contained in:
Jeffrey Walton 2018-01-11 17:59:24 -05:00
parent 591d70f1c7
commit 788cd1794d
No known key found for this signature in database
GPG Key ID: B36AB348921B1838
2 changed files with 3 additions and 3 deletions

View File

@ -240,7 +240,7 @@ void DetectX86Features()
g_cacheLineSize = 8 * GETBYTE(cpuid1[1], 1);
g_hasRDRAND = !!(cpuid1[2] /*ECX*/ & RDRAND_FLAG);
if (cpuid1[0] /*EAX*/ >= 7)
if (cpuid0[0] /*EAX*/ >= 7)
{
if (CpuId(7, 0, cpuid2))
{
@ -261,7 +261,7 @@ void DetectX86Features()
g_cacheLineSize = GETBYTE(cpuid2[2], 0);
g_hasRDRAND = !!(cpuid1[2] /*ECX*/ & RDRAND_FLAG);
if (cpuid1[0] /*EAX*/ >= 7)
if (cpuid0[0] /*EAX*/ >= 7)
{
if (CpuId(7, 0, cpuid2))
{

View File

@ -7,7 +7,7 @@
// appropriate instructions sets in some build configurations.
// TODO: we still need to implement Power8 SHA. Once we have Power8 SHA,
// we should be able to use CRYPTOPP_POWER8_AES_AVAILABLE and
// we should be able to use CRYPTOPP_POWER8_AES_AVAILABLE and
// CRYPTOPP_POWER8_SHA_AVAILABLE instead of the broader
// CRYPTOPP_POWER8_AVAILABLE. The change will need to be coordinated
// with the defines in config.h.