Any feedback? Thanks, Olivier > -----Original Message----- > From: Olivier Martin [mailto:olivier.mar...@arm.com] > Sent: 06 August 2014 15:49 > To: edk2-devel@lists.sourceforge.net; Kinney, Michael D; 'Gao, Liming' > Subject: Re: [edk2] [PATCH v3 1/3] MdePkg: Introduced BaseStackCheckLib > > 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/BaseStackCheck > Gcc.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.c > lktrk > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/edk2-devel
------------------------------------------------------------------------------ Slashdot TV. Video for Nerds. Stuff that matters. http://tv.slashdot.org/ _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel