Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1b42804d authored by Mark Rutland's avatar Mark Rutland Committed by Catalin Marinas
Browse files

arm64: entry: handle debug exceptions in el*_inv



Currently we enable debug exceptions before reading ESR_EL1 in both
el0_inv and el1_inv. If a debug exception is taken before we read
ESR_EL1, the value will have been corrupted.

As el*_inv is typically fatal, an intervening debug exception results in
misleading debug information being logged to the console, but is not
otherwise harmful.

As with the other entry paths, we can use the ESR_EL1 value stashed
earlier in the exception entry (in x25 for el0_sync{,_compat}, and x1
for el1_sync), giving us better error reporting in this case.

Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
Acked-by: default avatarWill Deacon <will.deacon@arm.com>
Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
parent ef37566c
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -352,8 +352,8 @@ el1_inv:
	// TODO: add support for undefined instructions in kernel mode
	enable_dbg
	mov	x0, sp
	mov	x2, x1
	mov	x1, #BAD_SYNC
	mrs	x2, esr_el1
	b	bad_mode
ENDPROC(el1_sync)

@@ -553,7 +553,7 @@ el0_inv:
	ct_user_exit
	mov	x0, sp
	mov	x1, #BAD_SYNC
	mrs	x2, esr_el1
	mov	x2, x25
	bl	bad_mode
	b	ret_to_user
ENDPROC(el0_sync)