summaryrefslogtreecommitdiff
path: root/arch/arm64/kernel
diff options
context:
space:
mode:
authorWill Deacon <will.deacon@arm.com>2016-07-19 15:07:39 +0100
committerAlex Shi <alex.shi@linaro.org>2016-10-20 15:38:13 +0800
commita1961c0da3b0e3fa8bd803547f96963bf31b69a4 (patch)
tree5c60572ea4eaa2e59582ea0651c3d5402bc573c8 /arch/arm64/kernel
parentda367d1e9e36ed55023a59a7fbcb3541732c2eff (diff)
arm64: kprobes: WARN if attempting to step with PSTATE.D=1
commit 44bd887ce10eb8061f6a137f8a73f823957edd82 upstream. Stepping with PSTATE.D=1 is bad news. The step won't generate a debug exception and we'll likely walk off into random data structures. This should never happen, but when it does, it's a PITA to debug. Add a WARN_ON to shout if we realise this is about to take place. Signed-off-by: Will Deacon <will.deacon@arm.com> Acked-by: Mark Rutland <mark.rutland@arm.com> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> Signed-off-by: David A. Long <dave.long@linaro.org>
Diffstat (limited to 'arch/arm64/kernel')
-rw-r--r--arch/arm64/kernel/probes/kprobes.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/arm64/kernel/probes/kprobes.c b/arch/arm64/kernel/probes/kprobes.c
index f1498b34d1c7..a9b274c99519 100644
--- a/arch/arm64/kernel/probes/kprobes.c
+++ b/arch/arm64/kernel/probes/kprobes.c
@@ -251,6 +251,8 @@ static void __kprobes setup_singlestep(struct kprobe *p,
if (kcb->kprobe_status == KPROBE_REENTER)
spsr_set_debug_flag(regs, 0);
+ else
+ WARN_ON(regs->pstate & PSR_D_BIT);
/* IRQs and single stepping do not mix well. */
kprobes_save_local_irqflag(kcb, regs);