audk/MdeModulePkg/Core/PiSmmCore
Jian J Wang 2930ef9809 MdeModulePkg/PiSmmCore: Implement heap guard feature for SMM mode
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

BIT2 and BIT3 of PcdHeapGuardPropertyMask can be used to enable or disable
memory guard for SMM 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 EfiRuntimeServicesCode
and EfiRuntimeServicesData by setting the PCD with value 0x60.

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.

Cc: Eric Dong <eric.dong@intel.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Ruiyu Ni <ruiyu.ni@intel.com>
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:19 +08:00
..
Dependency.c MdeModulePkg/Core: Fix typos in comments 2016-10-27 09:11:17 +08:00
Dispatcher.c MdeModulePkg: Update PiSmmCore to set correct ImageAddress into LoadedImage 2017-04-25 09:48:22 +08:00
Handle.c MdeModulePkg: Enhance the debug message for InstallProtocolInterface 2017-06-23 14:46:41 +08:00
HeapGuard.c MdeModulePkg/PiSmmCore: Implement heap guard feature for SMM mode 2017-11-17 11:03:19 +08:00
HeapGuard.h MdeModulePkg/PiSmmCore: Implement heap guard feature for SMM mode 2017-11-17 11:03:19 +08:00
InstallConfigurationTable.c MdeModulePkg: Fix use-after-free error in InstallConfigurationTable() 2017-06-20 16:55:10 +08:00
Locate.c MdeModulePkg: Return invalid param in LocateProtocol for Protocol==NULL 2017-06-21 21:37:34 +08:00
MemoryAttributesTable.c MdeModulePkg/PiSmmCore: switch to MdePkg allocation granularity macros 2017-03-06 11:29:25 +01:00
Notify.c
Page.c MdeModulePkg/PiSmmCore: Implement heap guard feature for SMM mode 2017-11-17 11:03:19 +08:00
PiSmmCore.c MdeModulePkg/PiSmmCore: Implement heap guard feature for SMM mode 2017-11-17 11:03:19 +08:00
PiSmmCore.h MdeModulePkg/PiSmmCore: Implement heap guard feature for SMM mode 2017-11-17 11:03:19 +08:00
PiSmmCore.inf MdeModulePkg/PiSmmCore: Implement heap guard feature for SMM mode 2017-11-17 11:03:19 +08:00
PiSmmCore.uni MdeModulePkg: Convert all .uni files to utf-8 2015-12-15 04:56:23 +00:00
PiSmmCoreExtra.uni MdeModulePkg: Convert all .uni files to utf-8 2015-12-15 04:56:23 +00:00
PiSmmCorePrivateData.h
PiSmmIpl.c MdeModulePkg PiSmmIpl: Fix the issue in LMFA feature 2017-04-25 09:48:18 +08:00
PiSmmIpl.inf MdeModulePkg/PiSmmIpl: Check order of EndOfDxe and DxeSmmReadyToLock 2016-05-30 09:41:02 +08:00
PiSmmIpl.uni MdeModulePkg: Convert all .uni files to utf-8 2015-12-15 04:56:23 +00:00
PiSmmIplExtra.uni MdeModulePkg: Convert all .uni files to utf-8 2015-12-15 04:56:23 +00:00
Pool.c MdeModulePkg/PiSmmCore: Implement heap guard feature for SMM mode 2017-11-17 11:03:19 +08:00
Smi.c MdeModulePkg/PiSmmCore: Add SmiHandlerProfile support. 2017-02-22 15:28:18 +08:00
SmiHandlerProfile.c MdeModulePkg SmiHandlerProfile: Use fixed data type in data structure 2017-05-24 15:27:34 +08:00
SmramProfileRecord.c MdeModulePkg PiSmmCore: Remove unreferenced symbol for SMRAM profile 2017-03-15 16:47:10 +08:00