diff options
author | Jan Dabros <jsd@semihalf.com> | 2019-12-02 13:30:03 +0100 |
---|---|---|
committer | Jan Dabros <jsd@semihalf.com> | 2019-12-18 08:47:10 +0100 |
commit | bb9549babc17631f7c7b944ad3213c5a8d173bdd (patch) | |
tree | 11e28161b6ef73c8d83412734b45fcb959ad7759 /bl31 | |
parent | 0d35873c8fbe3a1f9682044bd060e18a567f4e74 (diff) | |
download | trusted-firmware-a-bb9549babc17631f7c7b944ad3213c5a8d173bdd.tar.gz |
aarch64: Fix stack pointer maintenance on EA handling path
EA handlers for exceptions taken from lower ELs at the end invokes
el3_exit function. However there was a bug with sp maintenance which
resulted in el3_exit setting runtime stack to context. This in turn
caused memory corruption on consecutive EL3 entries.
Signed-off-by: Jan Dabros <jsd@semihalf.com>
Change-Id: I0424245c27c369c864506f4baa719968890ce659
Diffstat (limited to 'bl31')
-rw-r--r-- | bl31/aarch64/ea_delegate.S | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/bl31/aarch64/ea_delegate.S b/bl31/aarch64/ea_delegate.S index 3cc4d56a3f..1d28d5e0fb 100644 --- a/bl31/aarch64/ea_delegate.S +++ b/bl31/aarch64/ea_delegate.S @@ -102,9 +102,11 @@ func enter_lower_el_sync_ea /* Setup exception class and syndrome arguments for platform handler */ mov x0, #ERROR_EA_SYNC mrs x1, esr_el3 - adr x30, el3_exit - b delegate_sync_ea + bl delegate_sync_ea + /* el3_exit assumes SP_EL0 on entry */ + msr spsel, #MODE_SP_EL0 + b el3_exit 2: ldp x0, x1, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X0] ldp x2, x3, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_X2] @@ -146,8 +148,11 @@ func enter_lower_el_async_ea /* Setup exception class and syndrome arguments for platform handler */ mov x0, #ERROR_EA_ASYNC mrs x1, esr_el3 - adr x30, el3_exit - b delegate_async_ea + bl delegate_async_ea + + /* el3_exit assumes SP_EL0 on entry */ + msr spsel, #MODE_SP_EL0 + b el3_exit endfunc enter_lower_el_async_ea |