linux-hardened/arch/arm64
Mark Rutland 7d9e8f71b9 arm64: avoid returning from bad_mode
Generally, taking an unexpected exception should be a fatal event, and
bad_mode is intended to cater for this. However, it should be possible
to contain unexpected synchronous exceptions from EL0 without bringing
the kernel down, by sending a SIGILL to the task.

We tried to apply this approach in commit 9955ac47f4 ("arm64:
don't kill the kernel on a bad esr from el0"), by sending a signal for
any bad_mode call resulting from an EL0 exception.

However, this also applies to other unexpected exceptions, such as
SError and FIQ. The entry paths for these exceptions branch to bad_mode
without configuring the link register, and have no kernel_exit. Thus, if
we take one of these exceptions from EL0, bad_mode will eventually
return to the original user link register value.

This patch fixes this by introducing a new bad_el0_sync handler to cater
for the recoverable case, and restoring bad_mode to its original state,
whereby it calls panic() and never returns. The recoverable case
branches to bad_el0_sync with a bl, and returns to userspace via the
usual ret_to_user mechanism.

Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Fixes: 9955ac47f4 ("arm64: don't kill the kernel on a bad esr from el0")
Reported-by: Mark Salter <msalter@redhat.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: stable@vger.kernel.org
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2017-01-19 15:38:22 +00:00
..
boot Amlogic fixes for v4.10 2017-01-04 16:42:00 +01:00
configs ARM64: defconfig: enable DRM_MESON as module 2017-01-03 09:31:13 -08:00
crypto crypto: arm64/crc32 - accelerated support based on x86 SSE implementation 2016-12-07 20:01:22 +08:00
include arm64/ptrace: Avoid uninitialised struct padding in fpr_set() 2017-01-18 18:05:10 +00:00
kernel arm64: avoid returning from bad_mode 2017-01-19 15:38:22 +00:00
kvm Replace <asm/uaccess.h> with <linux/uaccess.h> globally 2016-12-24 11:46:01 -08:00
lib arm64: don't pull uaccess.h into *.S 2016-12-26 13:05:17 -05:00
mm arm64: Fix swiotlb fallback allocation 2017-01-17 11:48:11 +00:00
net arm64: bpf: optimize LD_ABS, LD_IND 2016-06-10 23:11:50 -07:00
xen arm64: don't pull uaccess.h into *.S 2016-12-26 13:05:17 -05:00
Kconfig arm64 updates for 4.10: 2016-12-13 16:39:21 -08:00
Kconfig.debug arm64: dump: Add checking for writable and exectuable pages 2016-11-07 18:15:04 +00:00
Kconfig.platforms ARM: SoC driver updates for v4.10 2016-12-15 16:03:25 -08:00
Makefile arm64: Add detection code for broken .inst support in binutils 2016-12-06 15:54:21 +00:00