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,6 +1,6 @@
|
||||
;------------------------------------------------------------------------------
|
||||
;
|
||||
; Copyright (c) 2006, 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
|
||||
@@ -19,9 +19,13 @@
|
||||
;
|
||||
;------------------------------------------------------------------------------
|
||||
|
||||
%include "Nasm.inc"
|
||||
|
||||
DEFAULT REL
|
||||
SECTION .text
|
||||
|
||||
extern ASM_PFX(PcdGet32 (PcdControlFlowEnforcementPropertyMask))
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; VOID
|
||||
; EFIAPI
|
||||
@@ -32,6 +36,27 @@
|
||||
;------------------------------------------------------------------------------
|
||||
global ASM_PFX(InternalLongJump)
|
||||
ASM_PFX(InternalLongJump):
|
||||
|
||||
mov eax, [ASM_PFX(PcdGet32 (PcdControlFlowEnforcementPropertyMask))]
|
||||
test eax, eax
|
||||
jz CetDone
|
||||
mov rax, cr4
|
||||
bt eax, 23 ; check if CET is enabled
|
||||
jnc CetDone
|
||||
|
||||
push rdx ; save rdx
|
||||
|
||||
mov rdx, [rcx + 0xF8] ; rdx = target SSP
|
||||
READSSP_RAX
|
||||
sub rdx, rax ; rdx = delta
|
||||
mov rax, rdx ; rax = delta
|
||||
|
||||
shr rax, 3 ; rax = delta/sizeof(UINT64)
|
||||
INCSSP_RAX
|
||||
|
||||
pop rdx ; restore rdx
|
||||
CetDone:
|
||||
|
||||
mov rbx, [rcx]
|
||||
mov rsp, [rcx + 8]
|
||||
mov rbp, [rcx + 0x10]
|
||||
|
Reference in New Issue
Block a user