mirror of
https://github.com/torvalds/linux.git
synced 2024-11-14 08:02:07 +00:00
uprobes: Do not setup ->active_uprobe/state prematurely
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>
This commit is contained in:
parent
79d54b249c
commit
746a9e6ba2
@ -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))
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user