UefiCpuPkg: PiSmmCpuDxeSmm skip MSR_IA32_MISC_ENABLE manipulation on AMD
AMD does not support MSR_IA32_MISC_ENABLE. Accessing that register causes and exception on AMD processors. If Execution Disable is supported, but if the processor is an AMD processor, skip manipulating MSR_IA32_MISC_ENABLE[34] XD Disable bit. Cc: Eric Dong <eric.dong@intel.com> Cc: Ray Ni <ray.ni@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> Signed-off-by: Garrett Kirkendall <garrett.kirkendall@amd.com> Message-Id: <20200622131825.1352-5-Garrett.Kirkendall@amd.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Tested-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Eric Dong <eric.dong@intel.com>
This commit is contained in:
committed by
mergify[bot]
parent
df667535ed
commit
bdafda8c45
@@ -1,5 +1,6 @@
|
||||
;------------------------------------------------------------------------------ ;
|
||||
; Copyright (c) 2016 - 2019, Intel Corporation. All rights reserved.<BR>
|
||||
; Copyright (c) 2020, AMD Incorporated. All rights reserved.<BR>
|
||||
; SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
;
|
||||
; Module Name:
|
||||
@@ -59,6 +60,7 @@ global ASM_PFX(gPatchSmiStack)
|
||||
global ASM_PFX(gPatchSmbase)
|
||||
extern ASM_PFX(mXdSupported)
|
||||
global ASM_PFX(gPatchXdSupported)
|
||||
global ASM_PFX(gPatchMsrIa32MiscEnableSupported)
|
||||
extern ASM_PFX(gSmiHandlerIdtr)
|
||||
|
||||
extern ASM_PFX(mCetSupported)
|
||||
@@ -153,17 +155,30 @@ ASM_PFX(gPatchSmiCr3):
|
||||
ASM_PFX(gPatchXdSupported):
|
||||
cmp al, 0
|
||||
jz @SkipXd
|
||||
|
||||
; If MSR_IA32_MISC_ENABLE is supported, clear XD Disable bit
|
||||
mov al, strict byte 1 ; source operand may be patched
|
||||
ASM_PFX(gPatchMsrIa32MiscEnableSupported):
|
||||
cmp al, 1
|
||||
jz MsrIa32MiscEnableSupported
|
||||
|
||||
; MSR_IA32_MISC_ENABLE not supported
|
||||
xor edx, edx
|
||||
push edx ; don't try to restore the XD Disable bit just before RSM
|
||||
jmp EnableNxe
|
||||
|
||||
;
|
||||
; Check XD disable bit
|
||||
;
|
||||
MsrIa32MiscEnableSupported:
|
||||
mov ecx, MSR_IA32_MISC_ENABLE
|
||||
rdmsr
|
||||
push edx ; save MSR_IA32_MISC_ENABLE[63-32]
|
||||
test edx, BIT2 ; MSR_IA32_MISC_ENABLE[34]
|
||||
jz .5
|
||||
jz EnableNxe
|
||||
and dx, 0xFFFB ; clear XD Disable bit if it is set
|
||||
wrmsr
|
||||
.5:
|
||||
EnableNxe:
|
||||
mov ecx, MSR_EFER
|
||||
rdmsr
|
||||
or ax, MSR_EFER_XD ; enable NXE
|
||||
|
Reference in New Issue
Block a user