From: "Wang, Jian J" <jian.j.wang@intel.com>
To: "Kinney, Michael D" <michael.d.kinney@intel.com>,
"Gao, Liming" <liming.gao@intel.com>,
edk2-devel <edk2-devel-bounces@lists.01.org>,
"edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Cc: "Yao, Jiewen" <jiewen.yao@intel.com>, Andrew Fish <afish@apple.com>
Subject: Re: [PATCH] MdePkg/BaseStackCheckLib: add MSFT toolchain support
Date: Thu, 18 Oct 2018 06:35:48 +0000 [thread overview]
Message-ID: <D827630B58408649ACB04F44C510003624E772C7@SHSMSX103.ccr.corp.intel.com> (raw)
In-Reply-To: <E92EE9817A31E24EB0585FDF735412F5B8B04F84@ORSMSX113.amr.corp.intel.com>
Mike,
I tested the lib with all supported MSFT toolchains. No difference found so far.
Regards,
Jian
> -----Original Message-----
> From: Kinney, Michael D
> Sent: Thursday, October 18, 2018 9:36 AM
> To: Gao, Liming <liming.gao@intel.com>; Wang, Jian J <jian.j.wang@intel.com>;
> edk2-devel <edk2-devel-bounces@lists.01.org>; edk2-devel@lists.01.org;
> Kinney, Michael D <michael.d.kinney@intel.com>
> Cc: Yao, Jiewen <jiewen.yao@intel.com>; Andrew Fish <afish@apple.com>
> Subject: RE: [edk2] [PATCH] MdePkg/BaseStackCheckLib: add MSFT toolchain
> support
>
> Jian,
>
> Is there a link to the documentation for these new
> functions? We should put the link in the file
> headers.
>
> The link to docs should also be added to the BZ.
>
> Also, which VS compilers was this tested with? Are
> different implementations required for different VS
> compilers?
>
> Mike
>
> > -----Original Message-----
> > From: Gao, Liming
> > Sent: Wednesday, October 17, 2018 6:22 PM
> > To: Wang, Jian J <jian.j.wang@intel.com>; edk2-devel
> > <edk2-devel-bounces@lists.01.org>; edk2-
> > devel@lists.01.org
> > Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Yao,
> > Jiewen <jiewen.yao@intel.com>; Andrew Fish
> > <afish@apple.com>
> > Subject: RE: [edk2] [PATCH] MdePkg/BaseStackCheckLib: add
> > MSFT toolchain support
> >
> > Jian:
> > The patch is good to me. Reviewed-by: Liming Gao
> > <liming.gao@intel.com>
> >
> > Thanks
> > Liming
> > >-----Original Message-----
> > >From: Wang, Jian J
> > >Sent: Thursday, October 18, 2018 9:19 AM
> > >To: edk2-devel <edk2-devel-bounces@lists.01.org>; edk2-
> > devel@lists.01.org
> > >Cc: Kinney, Michael D <michael.d.kinney@intel.com>; Yao,
> > Jiewen
> > ><jiewen.yao@intel.com>; Andrew Fish <afish@apple.com>;
> > Gao, Liming
> > ><liming.gao@intel.com>
> > >Subject: RE: [edk2] [PATCH] MdePkg/BaseStackCheckLib:
> > add MSFT toolchain
> > >support
> > >
> > >Ping ... :)
> > >
> > >Regards,
> > >Jian
> > >
> > >
> > >> -----Original Message-----
> > >> From: edk2-devel [mailto:edk2-devel-
> > bounces@lists.01.org]
> > >> Sent: Tuesday, October 16, 2018 8:59 AM
> > >> To: edk2-devel <edk2-devel-bounces@lists.01.org>;
> > edk2-
> > >devel@lists.01.org
> > >> Cc: Kinney, Michael D <michael.d.kinney@intel.com>;
> > Yao, Jiewen
> > >> <jiewen.yao@intel.com>; Andrew Fish <afish@apple.com>;
> > Gao, Liming
> > >> <liming.gao@intel.com>
> > >> Subject: Re: [edk2] [PATCH] MdePkg/BaseStackCheckLib:
> > add MSFT
> > >toolchain
> > >> support
> > >>
> > >> REF:
> > https://bugzilla.tianocore.org/show_bug.cgi?id=1239
> > >>
> > >> Regards,
> > >> Jian
> > >>
> > >>
> > >> > -----Original Message-----
> > >> > From: edk2-devel [mailto:edk2-devel-
> > bounces@lists.01.org]
> > >> > Sent: Tuesday, October 16, 2018 8:55 AM
> > >> > To: edk2-devel@lists.01.org
> > >> > Cc: Kinney, Michael D <michael.d.kinney@intel.com>;
> > Yao, Jiewen
> > >> > <jiewen.yao@intel.com>; Andrew Fish
> > <afish@apple.com>; Gao, Liming
> > >> > <liming.gao@intel.com>
> > >> > Subject: [edk2] [PATCH] MdePkg/BaseStackCheckLib:
> > add MSFT toolchain
> > >> > support
> > >> >
> > >> > This patch adds stack check support for MSFT
> > toolchain, with
> > >> > compiler option /GS and /RTCs. This functionality is
> > similar
> > >> > to the original ones supported by GCC toolchain.
> > >> >
> > >> > Usage example:
> > >> > This is a NULL library instance. Add it under a
> > [LibraryClasses]
> > >> > section in dsc file to let it be built into all
> > modules employed
> > >> > in a platform.
> > >> >
> > >> > [LibraryClasses]
> > >> >
> > NULL|MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.i
> > nf
> > >> >
> > >> > Please note all not modules can be built against
> > this library. Most
> > >> > of them are SEC type of modules, such as
> > >> >
> > >> > OvmfPkg/ResetVector/ResetVector.inf
> > >> >
> > >> > In this case, this library should not be added to a
> > common
> > >> > [LibraryClasses] section but to specific ones, like
> > >> > [LibraryClasses.common.PEI_CORE/PEIM/...].
> > >> >
> > >> > In addition, /GS and/or /RTCs should be added to
> > compiler command line.
> > >> > This can be done by adding something like below
> > under [BuildOptions]
> > >> > section in dsc file.
> > >> >
> > >> > [BuildOptions]
> > >> > MSFT:DEBUG_*_*_CC_FLAGS = /GS /GL-
> > >> > MSFT:DEBUG_*_*_CC_FLAGS = /RTCs /Od
> > >> >
> > >> > Note: /GL- is required for /GS, and /Od is required
> > for /RTCs.
> > >> > Note: The flash layout might be needed to update to
> > accommodate larger
> > >> > image size due to /Od is enforced.
> > >> >
> > >> > Pass tests:
> > >> > a. Overwrite a local buffer variable (in a 32-bit
> > and 64-bit driver)and
> > >> > check if it's caught by new code (on both real
> > platform and virtual
> > >> > platform)
> > >> > b. Boot Windows 10 and Ubuntu 18.04 on real platform
> > with this
> > >> > lib built-in
> > >> >
> > >> > Cc: Michael D Kinney <michael.d.kinney@intel.com>
> > >> > Cc: Liming Gao <liming.gao@intel.com>
> > >> > Cc: Jiewen Yao <jiewen.yao@intel.com>
> > >> > Cc: Andrew Fish <afish@apple.com>
> > >> > Contributed-under: TianoCore Contribution Agreement
> > 1.1
> > >> > Signed-off-by: Jian J Wang <jian.j.wang@intel.com>
> > >> > ---
> > >> > .../BaseStackCheckLib/BaseStackCheckLib.inf
> > | 11 +-
> > >> > .../Library/BaseStackCheckLib/BaseStackCheckMsft.c
> > | 221
> > >> > +++++++++++++++++++++
> > >> > .../Library/BaseStackCheckLib/BaseStackCheckNull.c
> > | 15 --
> > >> > .../BaseStackCheckLib/Ia32/StackCheckStubAsm.nasm
> > | 76 +++++++
> > >> > .../BaseStackCheckLib/X64/StackCheckStubAsm.nasm
> > | 54 +++++
> > >> > 5 files changed, 360 insertions(+), 17 deletions(-)
> > >> > create mode 100644
> > >> >
> > MdePkg/Library/BaseStackCheckLib/BaseStackCheckMsft.c
> > >> > delete mode 100644
> > >> MdePkg/Library/BaseStackCheckLib/BaseStackCheckNull.c
> > >> > create mode 100644
> > >> >
> > MdePkg/Library/BaseStackCheckLib/Ia32/StackCheckStubAsm.n
> > asm
> > >> > create mode 100644
> > >> >
> > MdePkg/Library/BaseStackCheckLib/X64/StackCheckStubAsm.na
> > sm
> > >> >
> > >> > diff --git
> > a/MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf
> > >> >
> > b/MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf
> > >> > index e280651b11..1c9e6710c6 100644
> > >> > ---
> > a/MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf
> > >> > +++
> > b/MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf
> > >> > @@ -4,6 +4,7 @@
> > >> > # Stack Check Library
> > >> > #
> > >> > # Copyright (c) 2014, ARM Ltd. All rights
> > reserved.<BR>
> > >> > +# Copyright (c) 2018, 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
> > >> > @@ -26,13 +27,19 @@
> > >> >
> > >> >
> > >> > #
> > >> > -# VALID_ARCHITECTURES = ARM AARCH64
> > >> > +# VALID_ARCHITECTURES = ARM AARCH64 IA32
> > X64
> > >> > #
> > >> >
> > >> > [Sources]
> > >> > BaseStackCheckGcc.c | GCC
> > >> > BaseStackCheckGcc.c | RVCT
> > >> > - BaseStackCheckNull.c | MSFT
> > >> > + BaseStackCheckMsft.c | MSFT
> > >> > +
> > >> > +[Sources.IA32]
> > >> > + Ia32/StackCheckStubAsm.nasm | MSFT
> > >> > +
> > >> > +[Sources.X64]
> > >> > + X64/StackCheckStubAsm.nasm | MSFT
> > >> >
> > >> > [Packages]
> > >> > MdePkg/MdePkg.dec
> > >> > diff --git
> > a/MdePkg/Library/BaseStackCheckLib/BaseStackCheckMsft.c
> > >> >
> > b/MdePkg/Library/BaseStackCheckLib/BaseStackCheckMsft.c
> > >> > new file mode 100644
> > >> > index 0000000000..951154f0cd
> > >> > --- /dev/null
> > >> > +++
> > b/MdePkg/Library/BaseStackCheckLib/BaseStackCheckMsft.c
> > >> > @@ -0,0 +1,221 @@
> > >> > +/** @file
> > >> > + Base Stack Check library for MSFT toolchains
> > compiler options: /GS, RTCs.
> > >> > +
> > >> > +Copyright (c) 2018, 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 that
> > accompanies this
> > >> distribution.
> > >> > +The full text of the license may be found at
> > >> > +http://opensource.org/licenses/bsd-license.php.
> > >> > +
> > >> > +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON
> > AN "AS IS"
> > >> BASIS,
> > >> > +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND,
> > EITHER
> > >> EXPRESS
> > >> > OR IMPLIED.
> > >> > +
> > >> > +**/
> > >> > +
> > >> > +#include <Base.h>
> > >> > +
> > >> > +#include <Library/BaseLib.h>
> > >> > +#include <Library/DebugLib.h>
> > >> > +#include <Library/PcdLib.h>
> > >> > +
> > >> > +//
> > >> > +// cookie value that is inserted by the MSFT
> > compiler into the stack frame.
> > >> > +//
> > >> > +extern UINTN __security_cookie;
> > >> > +
> > >> > +//
> > >> > +// Data structure used by MSFT compiler to record
> > local variable
> > >information.
> > >> > +//
> > >> > +
> > >> > +typedef struct _RTC_vardesc {
> > >> > + int Addr;
> > >> > + int Size;
> > >> > + char *Name;
> > >> > +} _RTC_vardesc;
> > >> > +
> > >> > +typedef struct _RTC_framedesc {
> > >> > + int VarCount;
> > >> > + _RTC_vardesc *Variables;
> > >> > +} _RTC_framedesc;
> > >> > +
> > >> > +#define RTC_STACK_CHECK_COOKIE 0xCCCCCCCC
> > >> > +
> > >> > +/**
> > >> > + Function called upon unexpected stack pointer
> > change.
> > >> > +
> > >> > + @param Ip Instruction address where the
> > check happened.
> > >> > +
> > >> > +**/
> > >> > +VOID
> > >> > +__cdecl
> > >> > +_RTC_Failure (
> > >> > + VOID *Ip
> > >> > + )
> > >> > +{
> > >> > + DEBUG ((DEBUG_ERROR, "\nSTACK FAULT: Suspicious
> > stack pointer
> > >> > (IP:%p).\n\n", Ip));
> > >> > +
> > >> > + //
> > >> > + // Generate a Breakpoint, DeadLoop, or NOP based
> > on PCD settings
> > >even if
> > >> > + // BaseDebugLibNull is in use.
> > >> > + //
> > >> > + if ((PcdGet8 (PcdDebugPropertyMask) &
> > >> > DEBUG_PROPERTY_ASSERT_BREAKPOINT_ENABLED) != 0) {
> > >> > + CpuBreakpoint ();
> > >> > + } else {
> > >> > + //
> > >> > + // Usually the boot should stop here if check
> > failure. Due to the fact
> > >> > + // that the normal Stack Switch happened in
> > boot will also fail the stack
> > >> > + // pointer check. So no dead loop here.
> > >> > + //
> > >> > + }
> > >> > + return;
> > >> > +}
> > >> > +
> > >> > +/**
> > >> > + Function reporting stack buffer overlow.
> > >> > +
> > >> > + @param Name Local varible name.
> > >> > + @param Ip Instruction address where the
> > check happened.
> > >> > +
> > >> > +**/
> > >> > +STATIC
> > >> > +VOID
> > >> > +_RTC_StackFailure (
> > >> > + CHAR8 *Name,
> > >> > + VOID *Ip
> > >> > + )
> > >> > +{
> > >> > + DEBUG ((DEBUG_ERROR, "\nSTACK FAULT: Local
> > variable '%a' overflow
> > >> > (IP:%p).\n\n", Name, Ip));
> > >> > +
> > >> > + //
> > >> > + // Generate a Breakpoint, DeadLoop, or NOP based
> > on PCD settings
> > >even if
> > >> > + // BaseDebugLibNull is in use.
> > >> > + //
> > >> > + if ((PcdGet8 (PcdDebugPropertyMask) &
> > >> > DEBUG_PROPERTY_ASSERT_BREAKPOINT_ENABLED) != 0) {
> > >> > + CpuBreakpoint ();
> > >> > + } else if ((PcdGet8 (PcdDebugPropertyMask) &
> > >> > DEBUG_PROPERTY_ASSERT_DEADLOOP_ENABLED) != 0) {
> > >> > + CpuDeadLoop ();
> > >> > + }
> > >> > + return ;
> > >> > +}
> > >> > +
> > >> > +/**
> > >> > + Function called upon stack buffer overflow.
> > (/RTCs)
> > >> > +
> > >> > + @param _Esp Stack frame pointer.
> > >> > + @param _Fd Pointer to local variable
> > information.
> > >> > +
> > >> > +**/
> > >> > +VOID
> > >> > +__fastcall
> > >> > +_RTC_CheckStackVars (
> > >> > + VOID *_Esp,
> > >> > + _RTC_framedesc *_Fd
> > >> > + )
> > >> > +{
> > >> > + INTN Index;
> > >> > + UINT8 *Addr;
> > >> > +
> > >> > + for (Index = 0; Index < _Fd->VarCount; Index++) {
> > >> > + Addr = (UINT8 *)_Esp + _Fd-
> > >Variables[Index].Addr - sizeof(UINT32);
> > >> > + if (*(UINT32 *)Addr != RTC_STACK_CHECK_COOKIE)
> > {
> > >> > + _RTC_StackFailure (_Fd-
> > >Variables[Index].Name,
> > >RETURN_ADDRESS(0));
> > >> > + }
> > >> > +
> > >> > + Addr = (UINT8 *)_Esp + _Fd-
> > >Variables[Index].Addr + _Fd-
> > >> > >Variables[Index].Size;
> > >> > + if (*(UINT32 *)Addr != RTC_STACK_CHECK_COOKIE)
> > {
> > >> > + _RTC_StackFailure (_Fd-
> > >Variables[Index].Name,
> > >RETURN_ADDRESS(0));
> > >> > + }
> > >> > + }
> > >> > +}
> > >> > +
> > >> > +/**
> > >> > + Function required by linker but not implemented
> > by firmware image
> > >loader.
> > >> > (/RTCs)
> > >> > +
> > >> > +**/
> > >> > +VOID
> > >> > +__cdecl
> > >> > +_RTC_Shutdown (
> > >> > + VOID
> > >> > + )
> > >> > +{
> > >> > + return;
> > >> > +}
> > >> > +
> > >> > +/**
> > >> > + Function required by linker but not implemented
> > by firmware image
> > >loader.
> > >> > (/RTCs)
> > >> > +
> > >> > +**/
> > >> > +VOID
> > >> > +__cdecl
> > >> > +_RTC_InitBase (
> > >> > + VOID
> > >> > + )
> > >> > +{
> > >> > + return;
> > >> > +}
> > >> > +
> > >> > +
> > >> > +/**
> > >> > + Function called upon stack frame overflow
> > detected. (/GS)
> > >> > +
> > >> > + @param StackCookie Actual cookie value got
> > from stack boundary.
> > >> > + @param Ip Instruction address where
> > the check happened.
> > >> > +
> > >> > +**/
> > >> > +NORETURN
> > >> > +VOID
> > >> > +__cdecl
> > >> > +__report_gsfailure (
> > >> > + UINTN StackCookie,
> > >> > + VOID *Ip
> > >> > + )
> > >> > +{
> > >> > + DEBUG ((DEBUG_ERROR, "\nSTACK FAULT: Stack
> > overflow check failed
> > >in
> > >> > cookie checker (IP:%p).\n\n", Ip));
> > >> > +
> > >> > + //
> > >> > + // Generate a Breakpoint, DeadLoop, or NOP based
> > on PCD settings
> > >even if
> > >> > + // BaseDebugLibNull is in use.
> > >> > + //
> > >> > + if ((PcdGet8 (PcdDebugPropertyMask) &
> > >> > DEBUG_PROPERTY_ASSERT_BREAKPOINT_ENABLED) != 0) {
> > >> > + CpuBreakpoint ();
> > >> > + } else if ((PcdGet8 (PcdDebugPropertyMask) &
> > >> > DEBUG_PROPERTY_ASSERT_DEADLOOP_ENABLED) != 0) {
> > >> > + CpuDeadLoop ();
> > >> > + }
> > >> > +}
> > >> > +
> > >> > +/**
> > >> > + Function called upon failure at local array range
> > check . (/GS)
> > >> > +
> > >> > +**/
> > >> > +NORETURN
> > >> > +VOID
> > >> > +__cdecl
> > >> > +__report_rangecheckfailure (
> > >> > + VOID
> > >> > + )
> > >> > +{
> > >> > + DEBUG((DEBUG_ERROR, "\nSTACK FAULT: Range check
> > check failed in
> > >> cookie
> > >> > checker.\n\n"));
> > >> > +
> > >> > + //
> > >> > + // Generate a Breakpoint, DeadLoop, or NOP based
> > on PCD settings
> > >even if
> > >> > + // BaseDebugLibNull is in use.
> > >> > + //
> > >> > + if ((PcdGet8 (PcdDebugPropertyMask) &
> > >> > DEBUG_PROPERTY_ASSERT_BREAKPOINT_ENABLED) != 0) {
> > >> > + CpuBreakpoint ();
> > >> > + } else if ((PcdGet8 (PcdDebugPropertyMask) &
> > >> > DEBUG_PROPERTY_ASSERT_DEADLOOP_ENABLED) != 0) {
> > >> > + CpuDeadLoop ();
> > >> > + }
> > >> > +}
> > >> > +
> > >> > +/**
> > >> > + Function required by linker but not implemented
> > by firmware image
> > >loader.
> > >> > (/GS)
> > >> > +
> > >> > +**/
> > >> > +VOID
> > >> > +__GSHandlerCheck (
> > >> > + VOID
> > >> > + )
> > >> > +{
> > >> > + return;
> > >> > +}
> > >> > +
> > >> > diff --git
> > a/MdePkg/Library/BaseStackCheckLib/BaseStackCheckNull.c
> > >> >
> > b/MdePkg/Library/BaseStackCheckLib/BaseStackCheckNull.c
> > >> > deleted file mode 100644
> > >> > index 7c27c73e23..0000000000
> > >> > ---
> > a/MdePkg/Library/BaseStackCheckLib/BaseStackCheckNull.c
> > >> > +++ /dev/null
> > >> > @@ -1,15 +0,0 @@
> > >> > -/** @file
> > >> > - This file is purely empty as a work around for
> > BaseStackCheck to pass
> > >MSVC
> > >> > build.
> > >> > -
> > >> > - Copyright (c) 2018, 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
> > >> > - http://opensource.org/licenses/bsd-license.php.
> > >> > -
> > >> > - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE
> > ON AN "AS IS"
> > >> BASIS,
> > >> > - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND,
> > EITHER
> > >> EXPRESS
> > >> > OR IMPLIED.
> > >> > -
> > >> > -**/
> > >> > -
> > >> > -extern int __BaseStackCheckNull;
> > >> > diff --git
> > >>
> > a/MdePkg/Library/BaseStackCheckLib/Ia32/StackCheckStubAsm
> > .nasm
> > >> >
> > b/MdePkg/Library/BaseStackCheckLib/Ia32/StackCheckStubAsm
> > .nasm
> > >> > new file mode 100644
> > >> > index 0000000000..d3c8d32161
> > >> > --- /dev/null
> > >> > +++
> > >b/MdePkg/Library/BaseStackCheckLib/Ia32/StackCheckStubAs
> > m.nasm
> > >> > @@ -0,0 +1,76 @@
> > >> > +;--------------------------------------------------
> > ---------------------------- ;
> > >> > +; Copyright (c) 2018, 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
> > >> > +; http://opensource.org/licenses/bsd-license.php.
> > >> > +;
> > >> > +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE
> > ON AN "AS IS"
> > >> > BASIS,
> > >> > +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY
> > KIND, EITHER
> > >> > EXPRESS OR IMPLIED.
> > >> > +;
> > >> > +; Module Name:
> > >> > +;
> > >> > +; StackCheckStubAsm.nasm
> > >> > +;
> > >> > +; Abstract:
> > >> > +;
> > >> > +; Stub globals and functions for compiler options
> > /GS, /RTCs
> > >> > +;
> > >> > +; Notes:
> > >> > +;
> > >> > +;--------------------------------------------------
> > ----------------------------
> > >> > +
> > >> > +;
> > >> > +; __declspec(noreturn) void __cdecl
> > __report_gsfailure(UINTN cookie,
> > >void
> > >> *ip);
> > >> > +;
> > >> > +extern ___report_gsfailure
> > >> > +;
> > >> > +; void __cdecl _RTC_Failure (void *Ip);
> > >> > +;
> > >> > +extern __RTC_Failure
> > >> > +
> > >> > +SECTION .data
> > >> > +
> > >> > +;
> > >> > +; UINTN __security_cookie;
> > >> > +;
> > >> > +global ___security_cookie
> > >> > +___security_cookie:
> > >> > + DW 987974FAh
> > >> > +
> > >> > +SECTION .text
> > >> > +
> > >> > +;
> > >> > +; void __fastcall __security_check_cookie(UINTN
> > cookie)
> > >> > +;
> > >> > +; Note: __fastcall calling convention uses
> > ecx/edx to pass first two
> > >> parameters
> > >> > +;
> > >> > +global @__security_check_cookie@4
> > >> > +@__security_check_cookie@4:
> > >> > + push ebp
> > >> > + mov ebp, esp
> > >> > + cmp ecx, [___security_cookie]
> > >> > + je .1
> > >> > + push dword [ebp] ; pass return address
> > as the second parameter
> > >> > + push ecx ; cookie value in stack
> > is the first parameter
> > >> > + call ___report_gsfailure
> > >> > +.1:
> > >> > + mov esp, ebp
> > >> > + pop ebp
> > >> > + ret
> > >> > +
> > >> > +;
> > >> > +; void __declspec(naked) __cdecl
> > _RTC_CheckEsp(void)
> > >> > +;
> > >> > +global __RTC_CheckEsp
> > >> > +__RTC_CheckEsp:
> > >> > + push ebp
> > >> > + mov ebp, esp
> > >> > + je .1
> > >> > + push dword [ebp] ; pass return address
> > to __RTC_Failure
> > >> > + call __RTC_Failure
> > >> > +.1:
> > >> > + mov esp, ebp
> > >> > + pop ebp
> > >> > + ret
> > >> > +
> > >> > diff --git
> > >a/MdePkg/Library/BaseStackCheckLib/X64/StackCheckStubAsm
> > .nasm
> > >> >
> > b/MdePkg/Library/BaseStackCheckLib/X64/StackCheckStubAsm.
> > nasm
> > >> > new file mode 100644
> > >> > index 0000000000..1c8601f09c
> > >> > --- /dev/null
> > >> > +++
> > >b/MdePkg/Library/BaseStackCheckLib/X64/StackCheckStubAsm
> > .nasm
> > >> > @@ -0,0 +1,54 @@
> > >> > +;--------------------------------------------------
> > ---------------------------- ;
> > >> > +; Copyright (c) 2018, 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
> > >> > +; http://opensource.org/licenses/bsd-license.php.
> > >> > +;
> > >> > +; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE
> > ON AN "AS IS"
> > >> > BASIS,
> > >> > +; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY
> > KIND, EITHER
> > >> > EXPRESS OR IMPLIED.
> > >> > +;
> > >> > +; Module Name:
> > >> > +;
> > >> > +; StackCheckStubAsm.nasm
> > >> > +;
> > >> > +; Abstract:
> > >> > +;
> > >> > +; Stub globals and functions for compiler options
> > /GS, /RTCs
> > >> > +;
> > >> > +; Notes:
> > >> > +;
> > >> > +;--------------------------------------------------
> > ----------------------------
> > >> > +
> > >> > +;
> > >> > +; __declspec(noreturn) void __cdecl
> > __report_gsfailure(UINTN cookie,
> > >void
> > >> *ip);
> > >> > +;
> > >> > +extern __report_gsfailure
> > >> > +
> > >> > +DEFAULT REL
> > >> > +
> > >> > +SECTION .data
> > >> > +
> > >> > +;
> > >> > +; UINTN __security_cookie;
> > >> > +;
> > >> > +global __security_cookie
> > >> > +__security_cookie:
> > >> > + DQ 0CFE3FE6A3F5C5A88h
> > >> > +
> > >> > +SECTION .text
> > >> > +
> > >> > +;
> > >> > +; void __fastcall __security_check_cookie(UINTN
> > cookie)
> > >> > +;
> > >> > +; Note: __fastcall calling convention uses
> > ecx/edx to pass first two
> > >> parameters
> > >> > +;
> > >> > +global __security_check_cookie
> > >> > +__security_check_cookie:
> > >> > + cmp rcx, qword [__security_cookie]
> > >> > + je .1
> > >> > + mov rdx, [esp] ; pass return address
> > as the second parameter
> > >> > + call __report_gsfailure
> > >> > +.1
> > >> > + ret
> > >> > +
> > >> > --
> > >> > 2.16.2.windows.1
> > >> >
> > >> > _______________________________________________
> > >> > edk2-devel mailing list
> > >> > edk2-devel@lists.01.org
> > >> > https://lists.01.org/mailman/listinfo/edk2-devel
> > >> _______________________________________________
> > >> edk2-devel mailing list
> > >> edk2-devel@lists.01.org
> > >> https://lists.01.org/mailman/listinfo/edk2-devel
next prev parent reply other threads:[~2018-10-18 6:35 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-16 0:55 [PATCH] MdePkg/BaseStackCheckLib: add MSFT toolchain support Jian J Wang
2018-10-16 0:59 ` Wang, Jian J
2018-10-18 1:18 ` Wang, Jian J
2018-10-18 1:22 ` Gao, Liming
2018-10-18 1:36 ` Kinney, Michael D
2018-10-18 2:15 ` Wang, Jian J
2018-10-18 23:16 ` Kinney, Michael D
2018-10-19 1:02 ` Wang, Jian J
2018-10-30 2:53 ` Wang, Jian J
2018-10-18 6:35 ` Wang, Jian J [this message]
2018-10-19 0:05 ` Kinney, Michael D
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=D827630B58408649ACB04F44C510003624E772C7@SHSMSX103.ccr.corp.intel.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox