summaryrefslogtreecommitdiff
path: root/include/linux/uprobes.h
diff options
context:
space:
mode:
authorOleg Nesterov <oleg@redhat.com>2012-09-30 20:54:53 +0400
committerOleg Nesterov <oleg@redhat.com>2012-10-07 23:19:41 +0400
commit076a365b3da99b68c5d58e394714d0611f1fa002 (patch)
treeb58ae7da7bfa80200bb9982f344b93cf3f22a7fd /include/linux/uprobes.h
parenta5f658b71bc622b731961ea3addcf146ed3c599f (diff)
downloadlinux-076a365b3da99b68c5d58e394714d0611f1fa002.tar.xz
uprobes: Do not delete uprobe if uprobe_unregister() fails
delete_uprobe() must not be called if register_for_each_vma(false) fails to remove all breakpoints, __uprobe_unregister() is correct. The problem is that register_for_each_vma(false) always returns 0 and thus this logic does not work. 1. Change verify_opcode() to return 0 rather than -EINVAL when unregister detects the !is_swbp insn, we can treat this case as success and currently unregister paths ignore the error code anyway. 2. Change remove_breakpoint() to propagate the error code from write_opcode(). 3. Change register_for_each_vma(is_register => false) to remove as much breakpoints as possible but return non-zero if remove_breakpoint() fails at least once. Signed-off-by: Oleg Nesterov <oleg@redhat.com> Acked-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Diffstat (limited to 'include/linux/uprobes.h')
0 files changed, 0 insertions, 0 deletions