audk/MdeModulePkg/Core/Dxe
Jian J Wang 235a4490c8 MdeModulePkg/DxeCore: Implement heap guard feature for UEFI
This feature makes use of paging mechanism to add a hidden (not present)
page just before and after the allocated memory block. If the code tries
to access memory outside of the allocated part, page fault exception will
be triggered.

This feature is controlled by three PCDs:

    gEfiMdeModulePkgTokenSpaceGuid.PcdHeapGuardPropertyMask
    gEfiMdeModulePkgTokenSpaceGuid.PcdHeapGuardPoolType
    gEfiMdeModulePkgTokenSpaceGuid.PcdHeapGuardPageType

BIT0 and BIT1 of PcdHeapGuardPropertyMask can be used to enable or disable
memory guard for page and pool respectively. PcdHeapGuardPoolType and/or
PcdHeapGuardPageType are used to enable or disable guard for specific type
of memory. For example, we can turn on guard only for EfiBootServicesData
and EfiRuntimeServicesData by setting the PCD with value 0x50.

Pool memory is not ususally integer multiple of one page, and is more likely
less than a page. There's no way to monitor the overflow at both top and
bottom of pool memory. BIT7 of PcdHeapGuardPropertyMask is used to control
how to position the head of pool memory so that it's easier to catch memory
overflow in memory growing direction or in decreasing direction.

Note1: Turning on heap guard, especially pool guard, will introduce too many
memory fragments. Windows 10 has a limitation in its boot loader, which
accepts at most 512 memory descriptors passed from BIOS. This will prevent
Windows 10 from booting if heap guard is enabled. The latest Linux
distribution with grub boot loader has no such issue. Normally it's not
recommended to enable this feature in production build of BIOS.

Note2: Don't enable this feature for NT32 emulation platform which doesn't
support paging.

Cc: Star Zeng <star.zeng@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Michael Kinney <michael.d.kinney@intel.com>
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Suggested-by: Ayellet Wolman <ayellet.wolman@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Jian J Wang <jian.j.wang@intel.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
Regression-tested-by: Laszlo Ersek <lersek@redhat.com>
2017-11-17 11:03:17 +08:00
..
Dispatcher MdeModulePkg DxeCore: Fix issue to print GUID value %g without pointer 2017-04-14 10:58:31 +08:00
DxeMain MdeModulePkg Core: Propagate PEI-phase FV authentication status to DXE 2017-10-10 20:54:42 +08:00
Event MdeModulePkg/Tpl: Fix negative value left shift 2017-09-29 16:14:17 +08:00
FwVol MdeModulePkg Core: Propagate PEI-phase FV authentication status to DXE 2017-10-10 20:54:42 +08:00
FwVolBlock MdeModulePkg Core: Propagate PEI-phase FV authentication status to DXE 2017-10-10 20:54:42 +08:00
Gcd MdeModulePkg: Update DxeCore to consume PI EfiGcdMemoryTypePersistent 2017-10-10 14:19:18 +08:00
Hand MdeModulePkg/DxeCore: Add comments for the ASSERT to check NULL ptr 2017-10-09 10:45:31 +08:00
Image MdeModulePkg/Core/Dxe: Remove extra connects for UEFI Applications 2017-11-13 09:56:49 -08:00
Library
Mem MdeModulePkg/DxeCore: Implement heap guard feature for UEFI 2017-11-17 11:03:17 +08:00
Misc MdeModulePkg/DxeCore: Implement heap guard feature for UEFI 2017-11-17 11:03:17 +08:00
SectionExtraction MdeModulePkg DxeCore: Only free ScratchBuffer when it is not NULL 2017-06-26 13:17:16 +08:00
DxeCore.uni MdeModulePkg: Convert all .uni files to utf-8 2015-12-15 04:56:23 +00:00
DxeCoreExtra.uni MdeModulePkg: Convert all .uni files to utf-8 2015-12-15 04:56:23 +00:00
DxeMain.h MdeModulePkg/DxeCore: switch to MdePkg allocation granularity macros 2017-03-06 11:29:20 +01:00
DxeMain.inf MdeModulePkg/DxeCore: Implement heap guard feature for UEFI 2017-11-17 11:03:17 +08:00