MdePkg/BaseLib: Add Shadow Stack Support for X86.
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1521 This patch adds SSP - shadow stack pointer to JumpBuffer. It will be used for the platform that enabled CET/ShadowStack. We add gEfiMdePkgTokenSpaceGuid.PcdControlFlowEnforcementPropertyMask to control the global enable/disable. Cc: Michael D Kinney <michael.d.kinney@intel.com> Cc: Liming Gao <liming.gao@intel.com> 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>
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
/** @file
|
||||
Implementation of SetJump() on IA-32.
|
||||
|
||||
Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
@@ -62,6 +62,32 @@ SetJump (
|
||||
pop ecx
|
||||
pop ecx
|
||||
mov edx, [esp]
|
||||
|
||||
xor eax, eax
|
||||
mov [edx + 24], eax ; save 0 to SSP
|
||||
|
||||
mov eax, [PcdGet32 (PcdControlFlowEnforcementPropertyMask)]
|
||||
test eax, eax
|
||||
jz CetDone
|
||||
_emit 0x0F
|
||||
_emit 0x20
|
||||
_emit 0xE0 ; mov eax, cr4
|
||||
bt eax, 23 ; check if CET is enabled
|
||||
jnc CetDone
|
||||
|
||||
mov eax, 1
|
||||
_emit 0xF3
|
||||
_emit 0x0F
|
||||
_emit 0xAE
|
||||
_emit 0xE8 ; INCSSP EAX to read original SSP
|
||||
_emit 0xF3
|
||||
_emit 0x0F
|
||||
_emit 0x1E
|
||||
_emit 0xC8 ; READSSP EAX
|
||||
mov [edx + 0x24], eax ; save SSP
|
||||
|
||||
CetDone:
|
||||
|
||||
mov [edx], ebx
|
||||
mov [edx + 4], esi
|
||||
mov [edx + 8], edi
|
||||
|
Reference in New Issue
Block a user