I addressed your comment 1. into my local patch. But for comment 2., I had initially added BaseStackLib to MdePkg.dsc. But it was not building as the FixedPcd was not defined: ------- /home/olivier/tianocore/MdePkg/Library/BaseStackCheckLib/BaseStackCheckGcc.c :26:34: error: "_PCD_VALUE_PcdBaseStackCanary" undeclared here (not in a function) VOID *__stack_chk_guard = (VOID*)FixedPcdGet64 (PcdBaseStackCanary); -------
_PCD_VALUE_* are only generated when a binary module is built. And there is no Module in MdePkg so adding 'NULL|MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf' to [LibraryClasses] would not help neither. One solution would be to add 'NULL|MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf' to MdeModulePkg.dsc Which solution would you suggested for your comment 2.? Thanks, Olivier > -----Original Message----- > From: Gao, Liming [mailto:liming....@intel.com] > Sent: 06 August 2014 04:00 > To: edk2-devel@lists.sourceforge.net; Kinney, Michael D > Subject: Re: [edk2] [PATCH v3 1/3] MdePkg: Introduced BaseStackCheckLib > > Olivier: > I have two minor comment. > 1. The declaration of __stack_chk_fail() misses the function comments. > 2. Add it into Mdepkg.dsc [Components.ARM, Components.AARCH64] section > to verify its build. > > Other part is good to me. Reviewed-by: Gao, Liming > <liming....@intel.com> > > Thanks > Liming > -----Original Message----- > From: Olivier Martin [mailto:olivier.mar...@arm.com] > Sent: Tuesday, August 05, 2014 5:48 PM > To: Kinney, Michael D > Cc: edk2-devel@lists.sourceforge.net > Subject: [edk2] [PATCH v3 1/3] MdePkg: Introduced BaseStackCheckLib > > This library only support GCC, RVCT and XCode for now. > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Andrew Fish <af...@apple.com> > Signed-off-by: Olivier Martin <olivier.mar...@arm.com> > --- > .../Library/BaseStackCheckLib/BaseStackCheckGcc.c | 61 > ++++++++++++++++++++++ > .../BaseStackCheckLib/BaseStackCheckLib.inf | 42 > +++++++++++++++ > MdePkg/MdePkg.dec | 4 ++ > 3 files changed, 107 insertions(+) > create mode 100644 > MdePkg/Library/BaseStackCheckLib/BaseStackCheckGcc.c > create mode 100644 > MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf > > diff --git a/MdePkg/Library/BaseStackCheckLib/BaseStackCheckGcc.c > b/MdePkg/Library/BaseStackCheckLib/BaseStackCheckGcc.c > new file mode 100644 > index 0000000..4160aff > --- /dev/null > +++ b/MdePkg/Library/BaseStackCheckLib/BaseStackCheckGcc.c > @@ -0,0 +1,61 @@ > +/** @file > + Base Stack Check library for GCC/clang. > + > + Use -fstack-protector-all compiler flag to make the compiler insert > + the __stack_chk_guard "canary" value into the stack and check the > + value prior to exiting the function. If the "canary" is overwritten > + __stack_chk_fail() is called. This is GCC specific code. > + > + Copyright (c) 2012, Apple Inc. 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. > + > +**/ > + > +#include <Base.h> > +#include <Library/BaseLib.h> > +#include <Library/DebugLib.h> > +#include <Library/PcdLib.h> > + > +VOID > +__stack_chk_fail ( > + VOID > + ); > + > + > +/// "canary" value that is inserted by the compiler into the stack > frame. > +VOID *__stack_chk_guard = (VOID*)FixedPcdGet64 (PcdBaseStackCanary); > + > +// If ASLR was enabled we could use > +//void (*__stack_chk_guard)(void) = __stack_chk_fail; > + > +/** > + Error path for compiler generated stack "canary" value check code. If > +the stack canary has been overwritten this function gets called on > +exit of the function. > +**/ > +VOID > +__stack_chk_fail ( > + VOID > + ) > +{ > + UINT8 DebugPropertyMask; > + > + DEBUG ((DEBUG_ERROR, "STACK FAULT: Buffer Overflow in function > + %a.\n", __builtin_return_address(0))); > + > + // > + // Generate a Breakpoint, DeadLoop, or NOP based on PCD settings > even > +if > + // BaseDebugLibNull is in use. > + // > + DebugPropertyMask = PcdGet8 (PcdDebugPropertyMask); > + if ((DebugPropertyMask & DEBUG_PROPERTY_ASSERT_BREAKPOINT_ENABLED) > != 0) { > + CpuBreakpoint (); > + } else if ((DebugPropertyMask & > DEBUG_PROPERTY_ASSERT_DEADLOOP_ENABLED) != 0) { > + CpuDeadLoop (); > + } > +} > diff --git a/MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf > b/MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf > new file mode 100644 > index 0000000..3304284 > --- /dev/null > +++ b/MdePkg/Library/BaseStackCheckLib/BaseStackCheckLib.inf > @@ -0,0 +1,42 @@ > +## @file > +# Stack Check Library > +# > +# Copyright (c) 2014, ARM Ltd. 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. > +# > +# > +## > + > +[Defines] > + INF_VERSION = 0x00010005 > + BASE_NAME = BaseStackCheckLib > + FILE_GUID = 5f6579f7-b648-4fdb-9f19- > 4c17e27e8eff > + MODULE_TYPE = BASE > + VERSION_STRING = 1.0 > + LIBRARY_CLASS = NULL > + > + > +# > +# VALID_ARCHITECTURES = ARM AARCH64 > +# > + > +[Sources] > + BaseStackCheckGcc.c | GCC > + BaseStackCheckGcc.c | RVCT > + > +[Packages] > + MdePkg/MdePkg.dec > + > +[LibraryClasses] > + BaseLib > + DebugLib > + > +[FixedPcd] > + gEfiMdePkgTokenSpaceGuid.PcdBaseStackCanary > + gEfiMdePkgTokenSpaceGuid.PcdDebugPropertyMask > diff --git a/MdePkg/MdePkg.dec b/MdePkg/MdePkg.dec index > 4daf3e6..fbb7d2b 100644 > --- a/MdePkg/MdePkg.dec > +++ b/MdePkg/MdePkg.dec > @@ -1544,6 +1544,10 @@ > # The required memory space is decided by the value of > PcdMaximumGuidedExtractHandler. > > gEfiMdePkgTokenSpaceGuid.PcdGuidedExtractHandlerTableAddress|0x1000000| > UINT64|0x30001015 > > + ## Canary value for the stack overflow protection. This PCD can be > + used by a firmware vendor # or for debugging purposes to change the > recommended value. > + gEfiMdePkgTokenSpaceGuid.PcdBaseStackCanary|0x0AFF|UINT64|0x0000002A > + > [PcdsFixedAtBuild.IPF] > ## The base address of IO port space for IA64 arch > > gEfiMdePkgTokenSpaceGuid.PcdIoBlockBaseAddressForIpf|0x0ffffc000000|UIN > T64|0x0000000f > -- > 1.8.5 > > > ----------------------------------------------------------------------- > ------- > Infragistics Professional > Build stunning WinForms apps today! > Reboot your WinForms applications with our WinForms controls. > Build a bridge from your legacy apps to the future. > http://pubads.g.doubleclick.net/gampad/clk?id=153845071&iu=/4140/ostg.c > lktrk > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/edk2-devel > > ----------------------------------------------------------------------- > ------- > Infragistics Professional > Build stunning WinForms apps today! > Reboot your WinForms applications with our WinForms controls. > Build a bridge from your legacy apps to the future. > http://pubads.g.doubleclick.net/gampad/clk?id=153845071&iu=/4140/ostg.c > lktrk > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/edk2-devel ------------------------------------------------------------------------------ Infragistics Professional Build stunning WinForms apps today! Reboot your WinForms applications with our WinForms controls. Build a bridge from your legacy apps to the future. http://pubads.g.doubleclick.net/gampad/clk?id=153845071&iu=/4140/ostg.clktrk _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel