From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marc Zyngier Date: Thu, 26 May 2016 17:51:12 +0100 Subject: [U-Boot] [PATCH v2 04/11] ARM: allocate extra space for PSCI stack in secure section during link phase In-Reply-To: <1464271273-23223-5-git-send-email-wens@csie.org> References: <1464271273-23223-1-git-send-email-wens@csie.org> <1464271273-23223-5-git-send-email-wens@csie.org> Message-ID: <57472980.5020105@arm.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On 26/05/16 15:01, Chen-Yu Tsai wrote: > The PSCI implementation expects at most 2 pages worth of space reserved > at the end of the secure section for its stacks. If PSCI is relocated to > secure SRAM, then everything is fine. If no secure SRAM is available, > and PSCI remains in main memory, the reserved memory space doesn't cover > the space used by the stack. > > If one accesses PSCI after Linux has fully booted, the memory that should > have been reserved for the PSCI stacks may have been used by the kernel > or userspace, and would be corrupted. Observed after effects include the > system hanging or telinit core dumping when trying to reboot. It seems > the init process gets hit the most on my test bed. > > This fix allocates the space used by the PSCI stacks in the secure > section by skipping pages in the linker script, but only when there is > no secure SRAM, to avoid bloating the binary. > > This fix is only a stop gap. It would be better to rework the stack > allocation mechanism, maybe with proper usage of CONFIG_ macros and an > explicit symbol. > > Signed-off-by: Chen-Yu Tsai > > squash! ARM: allocate extra space for PSCI stack in secure section during link phase > --- > arch/arm/cpu/u-boot.lds | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/arch/arm/cpu/u-boot.lds b/arch/arm/cpu/u-boot.lds > index cfab8b041234..0770f8c878d1 100644 > --- a/arch/arm/cpu/u-boot.lds > +++ b/arch/arm/cpu/u-boot.lds > @@ -50,6 +50,7 @@ SECTIONS > > #ifndef CONFIG_ARMV7_SECURE_BASE > #define CONFIG_ARMV7_SECURE_BASE > +#define __ARMV7_ALLOCATE_SECURE_STACK ALLOCATE_SECURE_STACK is a bit of a misnomer, because nothing is secure at all there (it is in RAM). Something like PSCI_RAM_STACK would be more accurate. > #endif > > .__secure_start : { > @@ -67,6 +68,12 @@ SECTIONS > SIZEOF(.__secure_start) + > SIZEOF(.secure_text); > > +#ifdef __ARMV7_ALLOCATE_SECURE_STACK > + /* Align to page boundary and skip 2 pages */ > + . = (. & ~ 0xfff) + 0x2000; > +#undef __ARMV7_ALLOCATE_SECURE_STACK > +#endif > + > __secure_end_lma = .; > .__secure_end : AT(__secure_end_lma) { > *(.__secure_end) > Thanks, M. -- Jazz is not dead. It just smells funny...