arm64: debug: Remove redundant user_mode(regs) checks from debug handlers
authorWill Deacon <will.deacon@arm.com>
Tue, 26 Feb 2019 15:37:09 +0000 (15:37 +0000)
committerWill Deacon <will.deacon@arm.com>
Tue, 9 Apr 2019 10:21:13 +0000 (11:21 +0100)
Now that the debug hook dispatching code takes the triggering exception
level into account, there's no need for the hooks themselves to poke
around with user_mode(regs).

Reviewed-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
arch/arm64/kernel/kgdb.c
arch/arm64/kernel/probes/kprobes.c
arch/arm64/kernel/probes/uprobes.c
arch/arm64/kernel/traps.c

index 4c01f299aeb2154cccbb9ce281dd37a2aff66db2..30853d5b785928d51666207c4af0fa61cb065adf 100644 (file)
@@ -244,9 +244,6 @@ int kgdb_arch_handle_exception(int exception_vector, int signo,
 
 static int kgdb_brk_fn(struct pt_regs *regs, unsigned int esr)
 {
-       if (user_mode(regs))
-               return DBG_HOOK_ERROR;
-
        kgdb_handle_exception(1, SIGTRAP, 0, regs);
        return DBG_HOOK_HANDLED;
 }
@@ -254,9 +251,6 @@ NOKPROBE_SYMBOL(kgdb_brk_fn)
 
 static int kgdb_compiled_brk_fn(struct pt_regs *regs, unsigned int esr)
 {
-       if (user_mode(regs))
-               return DBG_HOOK_ERROR;
-
        compiled_break = 1;
        kgdb_handle_exception(1, SIGTRAP, 0, regs);
 
@@ -266,7 +260,7 @@ NOKPROBE_SYMBOL(kgdb_compiled_brk_fn);
 
 static int kgdb_step_brk_fn(struct pt_regs *regs, unsigned int esr)
 {
-       if (user_mode(regs) || !kgdb_single_step)
+       if (!kgdb_single_step)
                return DBG_HOOK_ERROR;
 
        kgdb_handle_exception(1, SIGTRAP, 0, regs);
index baf97f47aec0a8675fcfe5b5e4edbffbaf0ffcab..000f32d1a75642692a6be01a290710598ca07803 100644 (file)
@@ -445,9 +445,6 @@ kprobe_single_step_handler(struct pt_regs *regs, unsigned int esr)
        struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
        int retval;
 
-       if (user_mode(regs))
-               return DBG_HOOK_ERROR;
-
        /* return error if this is not our step */
        retval = kprobe_ss_hit(kcb, instruction_pointer(regs));
 
@@ -468,9 +465,6 @@ static struct step_hook kprobes_step_hook = {
 static int __kprobes
 kprobe_breakpoint_handler(struct pt_regs *regs, unsigned int esr)
 {
-       if (user_mode(regs))
-               return DBG_HOOK_ERROR;
-
        kprobe_handler(regs);
        return DBG_HOOK_HANDLED;
 }
index 7d6ea88796a6bf2a289c91e92fd6be668e78cd2a..f37ab956767615ba90e15b57a2df34cec21255d4 100644 (file)
@@ -171,7 +171,7 @@ int arch_uprobe_exception_notify(struct notifier_block *self,
 static int uprobe_breakpoint_handler(struct pt_regs *regs,
                unsigned int esr)
 {
-       if (user_mode(regs) && uprobe_pre_sstep_notifier(regs))
+       if (uprobe_pre_sstep_notifier(regs))
                return DBG_HOOK_HANDLED;
 
        return DBG_HOOK_ERROR;
@@ -182,13 +182,9 @@ static int uprobe_single_step_handler(struct pt_regs *regs,
 {
        struct uprobe_task *utask = current->utask;
 
-       if (user_mode(regs)) {
-               WARN_ON(utask &&
-                       (instruction_pointer(regs) != utask->xol_vaddr + 4));
-
-               if (uprobe_post_sstep_notifier(regs))
-                       return DBG_HOOK_HANDLED;
-       }
+       WARN_ON(utask && (instruction_pointer(regs) != utask->xol_vaddr + 4));
+       if (uprobe_post_sstep_notifier(regs))
+               return DBG_HOOK_HANDLED;
 
        return DBG_HOOK_ERROR;
 }
index 85fdc3d7c5566c009b9fe841546139652472b01b..091379744d2f1ecb983d101c8498a807f2e1f1b2 100644 (file)
@@ -947,9 +947,6 @@ int is_valid_bugaddr(unsigned long addr)
 
 static int bug_handler(struct pt_regs *regs, unsigned int esr)
 {
-       if (user_mode(regs))
-               return DBG_HOOK_ERROR;
-
        switch (report_bug(regs->pc, regs)) {
        case BUG_TRAP_TYPE_BUG:
                die("Oops - BUG", regs, 0);
@@ -988,9 +985,6 @@ static int kasan_handler(struct pt_regs *regs, unsigned int esr)
        u64 addr = regs->regs[0];
        u64 pc = regs->pc;
 
-       if (user_mode(regs))
-               return DBG_HOOK_ERROR;
-
        kasan_report(addr, size, write, pc);
 
        /*