Skip to content

Commit

Permalink
arm64: debug: Remove redundant user_mode(regs) checks from debug hand…
Browse files Browse the repository at this point in the history
…lers

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>
  • Loading branch information
wildea01 committed Apr 9, 2019
1 parent a22d570 commit fb610f2
Show file tree
Hide file tree
Showing 4 changed files with 5 additions and 27 deletions.
8 changes: 1 addition & 7 deletions arch/arm64/kernel/kgdb.c
Original file line number Diff line number Diff line change
Expand Up @@ -244,19 +244,13 @@ 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;
}
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);

Expand All @@ -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);
Expand Down
6 changes: 0 additions & 6 deletions arch/arm64/kernel/probes/kprobes.c
Original file line number Diff line number Diff line change
Expand Up @@ -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));

Expand All @@ -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;
}
Expand Down
12 changes: 4 additions & 8 deletions arch/arm64/kernel/probes/uprobes.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
}
Expand Down
6 changes: 0 additions & 6 deletions arch/arm64/kernel/traps.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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);

/*
Expand Down

0 comments on commit fb610f2

Please sign in to comment.