From ee6ff1bb37e67df2e080cf49a03dfc8310dbc733 Mon Sep 17 00:00:00 2001 From: Jeenu Viswambharan Date: Mon, 19 Feb 2018 12:25:53 +0000 Subject: [PATCH] RAS: Validate stack pointer after error handling RAS handling flows might involve using setjmp/longjump calls introduced in earlier patches; therefore, it'd be good to make sure the stack has been unwound completely after the handling. This patch inserts ASM assertions on the RAS handling path to validate stack. Change-Id: I59d40d3122010c977cdeab3cce3160f3909e7e69 Signed-off-by: Jeenu Viswambharan --- bl31/aarch64/ea_delegate.S | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/bl31/aarch64/ea_delegate.S b/bl31/aarch64/ea_delegate.S index dce1f5ab..d18f9e57 100644 --- a/bl31/aarch64/ea_delegate.S +++ b/bl31/aarch64/ea_delegate.S @@ -6,6 +6,7 @@ #include +#include #include #include @@ -143,9 +144,24 @@ func ea_proceed mov sp, x5 mov x29, x30 +#if ENABLE_ASSERTIONS + /* Stash the stack pointer */ + mov x28, sp +#endif bl plat_ea_handler mov x30, x29 +#if ENABLE_ASSERTIONS + /* + * Error handling flows might involve long jumps; so upon returning from + * the platform error handler, validate that the we've completely + * unwound the stack. + */ + mov x27, sp + cmp x28, x27 + ASM_ASSERT(eq) +#endif + /* Make SP point to context */ msr spsel, #1 -- 2.30.2