KiDetectAmdNonArchSsbdSupport
VOID __stdcall KiDetectAmdNonArchSsbdSupport(INT64 a1){
__int32 v2;
__int64 v3;
if( (KiSpeculationFeatures & 0x80u) == 0i64 )
{
if( (unsigned int)EAX(__cpuid(0x80000000, 0)) < 0x80000008 )
v2 = 0;
else
v2 = EBX(__cpuid(-2147483640, 0));
if( (v2 & 0x2000000) != 0 )
{
DWORD1(KiSpeculationFeatures) = -1073676001;
KiSsbdMsr = -1073676001;
LODWORD(KiSpeculationFeatures) = KiSpeculationFeatures | 0x80;
return;
}
if( !HviIsAnyHypervisorPresent() )
{
switch( *(_BYTE *)(a1 + 64) )
{
case 0x15:
v3 = 0x40000000000000i64;
break;
case 0x16:
v3 = 0x200000000i64;
break;
case 0x17:
v3 = 1024i64;
break;
default:
return;
}
LODWORD(KiSpeculationFeatures) = KiSpeculationFeatures | 0x80;
DWORD1(KiSpeculationFeatures) = -1073672160;
KiSsbdMsr = -1073672160;
*((_QWORD *)&KiSpeculationFeatures + 1) = v3;
KiSsbdBit = v3;
}
}
}Referenced by:
No references.