Messages in this thread | | | Date | Fri, 3 Aug 2012 15:47:58 +0200 | From | Oleg Nesterov <> | Subject | Re: [PATCH] uprobes: Ignore unsupported instructions in uprobe_mmap |
| |
On 08/03, Srikar Dronamraju wrote: > > * Oleg Nesterov <oleg@redhat.com> [2012-08-02 19:53:12]: > > > On 08/02, Srikar Dronamraju wrote: > > > > > > This is case where the uprobe_mmap() and uprobe_unregister() raced, and > > > by the time install_breakpoint() was called by uprobe_mmap(), there were > > > no consumers. > > > > Yes, exactly, and this case doesn't look 100% right too, > > > > > i.e there are no uprobe->consumers and the underlying > > > instruction is still not a breakpoint instruction. > > > > Yes, but what if it _IS_ "int3" ? > > for int3, install_breakpoint returns -ENOTSUPP as install_breakpoint > does an explicit check if the instruction is breakpoint instruction > and x86 analyse_insn() also returns -ENOTSUPP.
install_breakpoint() checks ->consumers first and returns EEXIST.
OK. Suppose that the probed insn is int3, and nobody mmaps it.
1. uprobe_register() succeeds
2. uprobe_unregister() is called, it does consumer_del(), but before it calls delete_uprobe()...
3. uprobe_mmap() finds this uprobe and install_breakpoint() returns -EEXIST.
We could fix this particular problem (and other similar), but I think this is pointless. This all is broken. Please give me some time to try to make a patch which removes this all.
> > Yet another reason to move arch_uprobe_analyze_insn/etc to _register. > > > > I am for moving the stuff to _register that avoids us from looking at > these cases.
Yes. Lets try to do this step-by-step, after we fix the pending/discussed problems.
Oleg.
| |