From: Will Deacon <will.deacon@arm.com>
Date: Tue, 14 Aug 2018 16:24:54 +0100
Subject: arm64: force_signal_inject: WARN if called from kernel context
Git-commit: 8a60419d36762a1131c2b29f7bd14371db4df1b5
Patch-mainline: v4.20-rc1
References: jsc#ECO-561
force_signal_inject() is designed to send a fatal signal to userspace,
so WARN if the current pt_regs indicates a kernel context. This can
currently happen for the undefined instruction trap, so patch that up so
we always BUG() if we didn't have a handler.
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Mian Yousaf Kaukab <ykaukab@suse.de>
---
arch/arm64/kernel/traps.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
--- a/arch/arm64/kernel/traps.c
+++ b/arch/arm64/kernel/traps.c
@@ -315,6 +315,9 @@ void force_signal_inject(int signal, int
void __user *pc = (void __user *)instruction_pointer(regs);
const char *desc;
+ if (WARN_ON(!user_mode(regs)))
+ return;
+
switch (signal) {
case SIGILL:
desc = "undefined instruction";
@@ -368,8 +371,8 @@ asmlinkage void __exception do_undefinst
if (call_undef_hook(regs) == 0)
return;
- force_signal_inject(SIGILL, ILL_ILLOPC, regs, 0);
BUG_ON(!user_mode(regs));
+ force_signal_inject(SIGILL, ILL_ILLOPC, regs, 0);
}
#define __user_cache_maint(insn, address, res) \