audk/UefiCpuPkg/Include/Library
Jiewen Yao 3eb69b081c UefiCpuPkg/PiSmmCpu: Add Shadow Stack Support for X86 SMM.
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1521

We scan the SMM code with ROPgadget.
http://shell-storm.org/project/ROPgadget/
https://github.com/JonathanSalwan/ROPgadget/tree/master
This tool reports the gadget in SMM driver.

This patch enabled CET ShadowStack for X86 SMM.
If CET is supported, SMM will enable CET ShadowStack.
SMM CET will save the OS CET context at SmmEntry and
restore OS CET context at SmmExit.

Test:
1) test Intel internal platform (x64 only, CET enabled/disabled)
Boot test:
CET supported or not supported CPU
on CET supported platform
  CET enabled/disabled
  PcdCpuSmmCetEnable enabled/disabled
  Single core/Multiple core
  PcdCpuSmmStackGuard enabled/disabled
  PcdCpuSmmProfileEnable enabled/disabled
  PcdCpuSmmStaticPageTable enabled/disabled
CET exception test:
  #CF generated with PcdCpuSmmStackGuard enabled/disabled.
Other exception test:
  #PF for normal stack overflow
  #PF for NX protection
  #PF for RO protection
CET env test:
  Launch SMM in CET enabled/disabled environment (DXE) - no impact to DXE

The test case can be found at
https://github.com/jyao1/SecurityEx/tree/master/ControlFlowPkg

2) test ovmf (both IA32 and X64 SMM, CET disabled only)
test OvmfIa32/Ovmf3264, with -D SMM_REQUIRE.
  qemu-system-x86_64.exe -machine q35,smm=on -smp 4
    -serial file:serial.log
    -drive if=pflash,format=raw,unit=0,file=OVMF_CODE.fd,readonly=on
    -drive if=pflash,format=raw,unit=1,file=OVMF_VARS.fd
QEMU emulator version 3.1.0 (v3.1.0-11736-g7a30e7adb0-dirty)

3) not tested
IA32 CET enabled platform

Cc: Eric Dong <eric.dong@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Yao Jiewen <jiewen.yao@intel.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
Regression-tested-by: Laszlo Ersek <lersek@redhat.com>
2019-02-28 09:39:54 +08:00
..
LocalApicLib.h UefiCpuPkg: Clean up source files 2018-06-28 11:19:53 +08:00
MpInitLib.h UefiCpuPkg: Make the comments align with the functions 2016-12-14 21:34:42 +08:00
MtrrLib.h UefiCpuPkg/MtrrLib: Add comments to recommend to use batch-set API 2018-01-24 11:13:17 +08:00
PlatformSecLib.h UefiCpuPkg: Add PlatformSecLib 2015-10-19 19:09:56 +00:00
RegisterCpuFeaturesLib.h UefiCpuPkg/RegisterCpuFeaturesLib.h: Add new dependence types. 2018-10-22 11:19:47 +08:00
SmmCpuFeaturesLib.h UefiCpuPkg/PiSmmCpu: Add Shadow Stack Support for X86 SMM. 2019-02-28 09:39:54 +08:00
SmmCpuPlatformHookLib.h UefiCpuPkg: Add SmmCpuPlatformHookLib 2015-10-19 19:11:15 +00:00
UefiCpuLib.h Update the copyright notice format 2010-04-24 12:25:26 +00:00