Re: [PATCH v4 3.0-rc2-tip 7/22] 7: uprobes: mmap and fork hooks.
From: Srikar Dronamraju <hidden>
Date: 2011-06-17 04:58:08
Also in:
lkml
void __unregister_uprobe(...)
{
uprobe = find_uprobe(); // ref++
if (delete_consumer(...)); // includes tree removal on last consumer
// implies we own the last ref
return; // consumers
vma_prio_tree_foreach() {
// create list
}
list_for_each_entry_safe() {
// remove from list
remove_breakpoint(); // unconditional, if it wasn't there
// its a nop anyway, can't get any new
// new probes on account of holding
// uprobes_mutex and mmap() doesn't see
// it due to tree removal.
}
}This would have a bigger race. A breakpoint might be hit by which time the node is removed and we have no way to find out the uprobe. So we deliver an extra TRAP to the app.
int mmap_uprobe(...)
{
spin_lock(&uprobes_treelock);
for_each_probe_in_inode() {
// create list;
}
spin_unlock(..);
list_for_each_entry_safe() {
// remove from list
ret = install_breakpoint();
if (ret)
goto fail;
if (!uprobe_still_there()) // takes treelock
remove_breakpoint();
}
return 0;
fail:
list_for_each_entry_safe() {
// destroy list
}
return ret;
}register_uprobe will race with mmap_uprobe's first pass. So we might end up with a vma that doesnot have a breakpoint inserted but inserted in all other vma that map to the same inode. -- Thanks and Regards Srikar -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/ Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>