summaryrefslogtreecommitdiffstats
path: root/MdeModulePkg
diff options
context:
space:
mode:
authorJian J Wang <jian.j.wang@intel.com>2018-08-20 14:35:57 +0800
committerJian J Wang <jian.j.wang@intel.com>2018-08-30 07:22:29 +0800
commit8f2613628acf601a2a17bb64bb49ef73f85cfe2c (patch)
tree187199bfd88971255ff4dba5ee3251341d730472 /MdeModulePkg
parent497a5fb1d8f834e1bc84d3496d7f2228bf99f7df (diff)
downloadedk2-8f2613628acf601a2a17bb64bb49ef73f85cfe2c.tar.gz
edk2-8f2613628acf601a2a17bb64bb49ef73f85cfe2c.tar.bz2
edk2-8f2613628acf601a2a17bb64bb49ef73f85cfe2c.zip
MdeModulePkg/MdeModulePkg.dec: add new settings for PCDs
The change is part of requirement tracked by #BZ1095 https://bugzilla.tianocore.org/show_bug.cgi?id=1095 Background: Heap Guard and NULL Pointer Detection are very useful features to detect code flaw in EDK II. If an issue is detected, #PF exception will be triggered and the BIOS will enter into dead loop, which is the default behavior of exception handling. From QA perspective, this default behavior will block them to collect all tests result in reasonable time. The solution is to introduce non-stop mode to Heap Guard and NULL Pointer Detection features. This needs to update CpuDxe, PiSmmCpuDxeSmm and CpuExceptionHandlerLib to allow the code to continue execution after #PF. The mechanism behind it is the same as SMM Profile feature, in which a special #PF handler is registered to set the page causing #PF to be 'present' and setup single steop trap, then return the control back to the instruction accessing that page. Once the instruction is re-executed, a #DB is triggered and a special handler for it will be called to reset the page back to 'not-present'. The non-stop mode is controlled by BIT6 of following PCDs gEfiMdeModulePkgTokenSpaceGuid.PcdHeapGuardPropertyMask gEfiMdeModulePkgTokenSpaceGuid.PcdNullPointerDetectionPropertyMask BIT6 of PcdHeapGuardPropertyMask is used to enable/disable non-stop mode of Heap Guard feature. It applies to both UEFI and SMM heap guard, if any of them is enabled. BIT6 of PcdNullPointerDetectionPropertyMask is used to enable/disable non-stop mode of NULL Pointer Detection feature. It applies to both UEFI and SMM NULL Pointer Detection, if any of them is enabled. The default setting is 'disable', meaning the boot will stop at #PF exception. Cc: Eric Dong <eric.dong@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> Cc: Ruiyu Ni <ruiyu.ni@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Jian J Wang <jian.j.wang@intel.com> Reviewed-by: Eric Dong <eric.dong@intel.com> Acked-by: Laszlo Ersek <lersek@redhat.com>
Diffstat (limited to 'MdeModulePkg')
-rw-r--r--MdeModulePkg/MdeModulePkg.dec4
1 files changed, 3 insertions, 1 deletions
diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec
index 261da61c18..74a699cbb7 100644
--- a/MdeModulePkg/MdeModulePkg.dec
+++ b/MdeModulePkg/MdeModulePkg.dec
@@ -932,7 +932,8 @@
# If enabled, accessing NULL address in UEFI or SMM code can be caught.<BR><BR>
# BIT0 - Enable NULL pointer detection for UEFI.<BR>
# BIT1 - Enable NULL pointer detection for SMM.<BR>
- # BIT2..6 - Reserved for future uses.<BR>
+ # BIT2..5 - Reserved for future uses.<BR>
+ # BIT6 - Enable non-stop mode.<BR>
# BIT7 - Disable NULL pointer detection just after EndOfDxe. <BR>
# This is a workaround for those unsolvable NULL access issues in
# OptionROM, boot loader, etc. It can also help to avoid unnecessary
@@ -1014,6 +1015,7 @@
# BIT1 - Enable UEFI pool guard.<BR>
# BIT2 - Enable SMM page guard.<BR>
# BIT3 - Enable SMM pool guard.<BR>
+ # BIT6 - Enable non-stop mode.<BR>
# BIT7 - The direction of Guard Page for Pool Guard.
# 0 - The returned pool is near the tail guard page.<BR>
# 1 - The returned pool is near the head guard page.<BR>