mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-29 16:44:10 +02:00
MdeModulePkg/PiSmmCore: remove NX attr for SMM RAM
If PcdDxeNxMemoryProtectionPolicy is set to enable protection for memory of EfiReservedMemoryType, the BIOS will hang at a page fault exception during starting SMM driver. The root cause is that SMM RAM is type of EfiReservedMemoryType and marked as non-executable. The fix is simply removing NX attribute for those memory. Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Ruiyu Ni <ruiyu.ni@intel.com> Cc: Eric Dong <eric.dong@intel.com> Cc: Star Zeng <star.zeng@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Jian J Wang <jian.j.wang@intel.com> Reviewed-by: Star Zeng <star.zeng@intel.com>
This commit is contained in:
parent
d4d87596c1
commit
94c0129d24
@ -1550,6 +1550,7 @@ SmmIplEntry (
|
|||||||
EFI_CPU_ARCH_PROTOCOL *CpuArch;
|
EFI_CPU_ARCH_PROTOCOL *CpuArch;
|
||||||
EFI_STATUS SetAttrStatus;
|
EFI_STATUS SetAttrStatus;
|
||||||
EFI_SMRAM_DESCRIPTOR *SmramRangeSmmDriver;
|
EFI_SMRAM_DESCRIPTOR *SmramRangeSmmDriver;
|
||||||
|
EFI_GCD_MEMORY_SPACE_DESCRIPTOR MemDesc;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Fill in the image handle of the SMM IPL so the SMM Core can use this as the
|
// Fill in the image handle of the SMM IPL so the SMM Core can use this as the
|
||||||
@ -1616,7 +1617,8 @@ SmmIplEntry (
|
|||||||
|
|
||||||
GetSmramCacheRange (mCurrentSmramRange, &mSmramCacheBase, &mSmramCacheSize);
|
GetSmramCacheRange (mCurrentSmramRange, &mSmramCacheBase, &mSmramCacheSize);
|
||||||
//
|
//
|
||||||
// If CPU AP is present, attempt to set SMRAM cacheability to WB
|
// If CPU AP is present, attempt to set SMRAM cacheability to WB and clear
|
||||||
|
// XP if it's set.
|
||||||
// Note that it is expected that cacheability of SMRAM has been set to WB if CPU AP
|
// Note that it is expected that cacheability of SMRAM has been set to WB if CPU AP
|
||||||
// is not available here.
|
// is not available here.
|
||||||
//
|
//
|
||||||
@ -1631,6 +1633,18 @@ SmmIplEntry (
|
|||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
DEBUG ((DEBUG_WARN, "SMM IPL failed to set SMRAM window to EFI_MEMORY_WB\n"));
|
DEBUG ((DEBUG_WARN, "SMM IPL failed to set SMRAM window to EFI_MEMORY_WB\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Status = gDS->GetMemorySpaceDescriptor(
|
||||||
|
mCurrentSmramRange->PhysicalStart,
|
||||||
|
&MemDesc
|
||||||
|
);
|
||||||
|
if (!EFI_ERROR (Status) && (MemDesc.Attributes & EFI_MEMORY_XP) != 0) {
|
||||||
|
gDS->SetMemorySpaceAttributes (
|
||||||
|
mCurrentSmramRange->PhysicalStart,
|
||||||
|
mCurrentSmramRange->PhysicalSize,
|
||||||
|
MemDesc.Attributes & (~EFI_MEMORY_XP)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
// if Loading module at Fixed Address feature is enabled, save the SMRAM base to Load
|
// if Loading module at Fixed Address feature is enabled, save the SMRAM base to Load
|
||||||
|
Loading…
x
Reference in New Issue
Block a user