audk/MdeModulePkg/Core/PiSmmCore
Jian J Wang 54ec85dd29 MdeModulePkg/PiSmmIpl: fix non-executable SMM RAM
This patch fixes an issue introduced by commit

  5b91bf82c6

and

  0c9f2cb10b

This issue will only happen if PcdDxeNxMemoryProtectionPolicy is
enabled for reserved memory, which will mark SMM RAM as NX (non-
executable) during DXE core initialization. SMM IPL driver will
unset the NX attribute for SMM RAM to allow loading and running
SMM core/drivers.

But above commit will fail the unset operation of the NX attribute
due to a fact that SMM RAM has zero cache attribute (MRC code always
sets 0 attribute to reserved memory), which will cause GCD internal
method ConverToCpuArchAttributes() to return 0 attribute, which is
taken as invalid CPU paging attribute and skip the calling of
gCpu->SetMemoryAttributes().

The solution is to make use of existing functionality in PiSmmIpl
to make sure one cache attribute is set for SMM RAM. For performance
consideration, PiSmmIpl will always try to set SMM RAM to write-back.
But there's a hole in the code which will fail the setting write-back
attribute because of no corresponding cache capabilities. This patch
will add necessary cache capabilities before setting corresponding
attributes.

Cc: Star Zeng <star.zeng@intel.com>
Cc: Eric Dong <eric.dong@intel.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Ruiyu Ni <ruiyu.ni@intel.com>
Cc: Michael D Kinney <michael.d.kinney@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>
2018-04-13 13:05:00 +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/SmmCore: add sanity check for SetMemoryAttributes 2018-04-13 13:04:59 +08:00
HeapGuard.h MdeModulePkg/PiSmmCore: Fix issues in Heap Guard 2017-12-13 11:42:57 +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/Core: Fix incorrect memory map generated in a rare case 2017-12-19 15:19:46 +08:00
Notify.c MdeModulePkg/SmmCore: SMM register protocol notify function clarify 2015-05-07 02:29:52 +00:00
Page.c MdeModulePkg PiSmmCore: Set ForwardLink to NULL in RemoveOldEntry() 2018-01-31 17:23:36 +08:00
PiSmmCore.c MdeModulePkg PiSmmCore: Register SMI handler to install S3SmmInitDone 2018-03-03 14:20:38 +08:00
PiSmmCore.h MdeModulePkg PiSmmCore: Register SMI handler to install S3SmmInitDone 2018-03-03 14:20:38 +08:00
PiSmmCore.inf MdeModulePkg PiSmmCore: Register SMI handler to install S3SmmInitDone 2018-03-03 14:20:38 +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 MdeModulePkg PiSmmCore: Remove a hidden assumption of SMRAM reservation 2015-07-26 07:38:12 +00:00
PiSmmIpl.c MdeModulePkg/PiSmmIpl: fix non-executable SMM RAM 2018-04-13 13:05:00 +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: Fix unix style of EOL 2017-11-21 20:24:37 +08:00
Smi.c MdeModulePkg/SmmCore: Fix hang due to already-freed memory deference 2018-02-03 14:48:58 +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