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 <jaiprakashs@marvell.com>
This commit is contained in:
Jaiprakash Singh 2024-12-22 22:13:57 -08:00 committed by Manish Pandey
parent 0c370e2d59
commit 0bc3115f6e

View file

@ -158,6 +158,8 @@ func handle_pending_async_ea
b.eq 1f b.eq 1f
ret ret
1: 1:
ldr x30, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_LR]
str xzr, [sp, #CTX_GPREGS_OFFSET + CTX_GPREG_LR]
exception_return exception_return
endfunc handle_pending_async_ea endfunc handle_pending_async_ea