Skip to content

Commit

Permalink
uprobes: Do not setup ->active_uprobe/state prematurely
Browse files Browse the repository at this point in the history
handle_swbp() sets utask->active_uprobe before handler_chain(),
and UTASK_SSTEP before pre_ssout(). This complicates the code
for no reason,  arch_ hooks or consumer->handler() should not
(and can't) use this info.

Change handle_swbp() to initialize them after pre_ssout(), and
remove the no longer needed cleanup-utask code.

Signed-off-by: Oleg Nesterov <oleg@redhat.com>
cked-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
  • Loading branch information
Oleg Nesterov committed Sep 29, 2012
1 parent 79d54b2 commit 746a9e6
Showing 1 changed file with 3 additions and 6 deletions.
9 changes: 3 additions & 6 deletions kernel/events/uprobes.c
Original file line number Diff line number Diff line change
Expand Up @@ -1496,22 +1496,19 @@ static void handle_swbp(struct pt_regs *regs)
if (!utask)
goto cleanup_ret;
}
utask->active_uprobe = uprobe;

handler_chain(uprobe, regs);
if (uprobe->flags & UPROBE_SKIP_SSTEP && can_skip_sstep(uprobe, regs))
goto cleanup_ret;

utask->state = UTASK_SSTEP;
if (!pre_ssout(uprobe, regs, bp_vaddr)) {
arch_uprobe_enable_step(&uprobe->arch);
utask->active_uprobe = uprobe;
utask->state = UTASK_SSTEP;
return;
}

cleanup_ret:
if (utask) {
utask->active_uprobe = NULL;
utask->state = UTASK_RUNNING;
}
if (!(uprobe->flags & UPROBE_SKIP_SSTEP))

/*
Expand Down

0 comments on commit 746a9e6

Please sign in to comment.