mirror of https://github.com/acidanthera/audk.git
UefiCpuPkg/PiSmmCpuDxeSmm: Update mPatchCetSupported set condition
REF:https://bugzilla.tianocore.org/show_bug.cgi?id=3584 Function AsmCpuid should first check the value for Basic CPUID Information. The fix is to update the mPatchCetSupported judgment statement. Signed-off-by: Wenxing Hou <wenxing.hou@intel.com> Reviewed-by: Ray Ni <ray.ni@intel.com> Cc: Eric Dong <eric.dong@intel.com> Cc: Ray Ni <ray.ni@intel.com> Cc: Rahul Kumar <rahul1.kumar@intel.com> Cc: Sheng W <w.sheng@intel.com> Cc: Yao Jiewen <jiewen.yao@intel.com>
This commit is contained in:
parent
f0fe55bca4
commit
5d34cc49d5
|
@ -729,8 +729,8 @@ PiCpuSmmEntry (
|
|||
|
||||
DEBUG ((DEBUG_INFO, "PcdControlFlowEnforcementPropertyMask = %d\n", PcdGet32 (PcdControlFlowEnforcementPropertyMask)));
|
||||
if (PcdGet32 (PcdControlFlowEnforcementPropertyMask) != 0) {
|
||||
AsmCpuid (CPUID_EXTENDED_FUNCTION, &RegEax, NULL, NULL, NULL);
|
||||
if (RegEax > CPUID_EXTENDED_FUNCTION) {
|
||||
AsmCpuid (CPUID_SIGNATURE, &RegEax, NULL, NULL, NULL);
|
||||
if (RegEax >= CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS) {
|
||||
AsmCpuidEx (CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS, CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_SUB_LEAF_INFO, NULL, NULL, &RegEcx, &RegEdx);
|
||||
DEBUG ((DEBUG_INFO, "CPUID[7/0] ECX - 0x%08x\n", RegEcx));
|
||||
DEBUG ((DEBUG_INFO, " CET_SS - 0x%08x\n", RegEcx & CPUID_CET_SS));
|
||||
|
@ -747,6 +747,9 @@ PiCpuSmmEntry (
|
|||
AsmCpuidEx(CPUID_EXTENDED_STATE, 12, &RegEax, NULL, &RegEcx, NULL);
|
||||
DEBUG ((DEBUG_INFO, "CPUID[D/12] EAX - 0x%08x, ECX - 0x%08x\n", RegEax, RegEcx));
|
||||
}
|
||||
} else {
|
||||
mCetSupported = FALSE;
|
||||
PatchInstructionX86(mPatchCetSupported, mCetSupported, 1);
|
||||
}
|
||||
} else {
|
||||
mCetSupported = FALSE;
|
||||
|
|
|
@ -985,13 +985,14 @@ CheckFeatureSupported (
|
|||
MSR_IA32_MISC_ENABLE_REGISTER MiscEnableMsr;
|
||||
|
||||
if ((PcdGet32 (PcdControlFlowEnforcementPropertyMask) != 0) && mCetSupported) {
|
||||
AsmCpuid (CPUID_EXTENDED_FUNCTION, &RegEax, NULL, NULL, NULL);
|
||||
if (RegEax <= CPUID_EXTENDED_FUNCTION) {
|
||||
mCetSupported = FALSE;
|
||||
PatchInstructionX86 (mPatchCetSupported, mCetSupported, 1);
|
||||
}
|
||||
AsmCpuidEx (CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS, CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_SUB_LEAF_INFO, NULL, NULL, &RegEcx, NULL);
|
||||
if ((RegEcx & CPUID_CET_SS) == 0) {
|
||||
AsmCpuid (CPUID_SIGNATURE, &RegEax, NULL, NULL, NULL);
|
||||
if (RegEax >= CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS) {
|
||||
AsmCpuidEx (CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS, CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_SUB_LEAF_INFO, NULL, NULL, &RegEcx, NULL);
|
||||
if ((RegEcx & CPUID_CET_SS) == 0) {
|
||||
mCetSupported = FALSE;
|
||||
PatchInstructionX86 (mPatchCetSupported, mCetSupported, 1);
|
||||
}
|
||||
} else {
|
||||
mCetSupported = FALSE;
|
||||
PatchInstructionX86 (mPatchCetSupported, mCetSupported, 1);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue