From 0bc3115f6e7b857344c6ac034d74b0fe81d216ed Mon Sep 17 00:00:00 2001 From: Jaiprakash Singh Date: Sun, 22 Dec 2024 22:13:57 -0800 Subject: [PATCH] fix(el3-runtime): for nested serrors, restore x30 to lower EL address In FFH mode, When handling nested serrors, serror is handled once and all subsequent serrors are considered handled.And EL3 directly return to lower EL. While returning to lower EL, x30 is restore to CTX_SAVED_GPREG_LR address.CTX_SAVED_GPREG_LR address belongs to EL3 address range and this address will not be accessible in lower EL. After return to lower EL, when lower EL access x30, segmentation fault happens and Kernel kills application. This patch restore x30 to lower EL address (CTX_GPREG_LR) to avoid segmentation fault at lower EL. Change-Id: Ie8becb206e0c0204e01d12ab63ae6e915dcf33e4 Signed-off-by: Jaiprakash Singh --- bl31/aarch64/ea_delegate.S | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bl31/aarch64/ea_delegate.S b/bl31/aarch64/ea_delegate.S index 28d218737..91ea75d5f 100644 --- a/bl31/aarch64/ea_delegate.S +++ b/bl31/aarch64/ea_delegate.S @@ -158,6 +158,8 @@ func handle_pending_async_ea b.eq 1f ret 1: + ldr x30, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_LR] + str xzr, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_LR] exception_return endfunc handle_pending_async_ea