Thread (119 messages) 119 messages, 10 authors, 2011-07-25

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>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help