Re: [PATCH 4/5] uprobes: kill copy_vma()->uprobe_mmap()

From: Oleg Nesterov
Date: Mon Jul 09 2012 - 06:41:45 EST


On 07/09, Peter Zijlstra wrote:
>
> On Sun, 2012-07-08 at 22:30 +0200, Oleg Nesterov wrote:
> > And why this uprobe_mmap() was added? I believe the intent was wrong.
> > Note that the caller is going to do move_page_tables(), all registered
> > uprobes are already faulted in, we only change the virtual addresses.
>
> I think it was because of the copy_vma + do_munmap. Since do_munmap()
> should be doing a put on the uprobe, we need an extra get to balance.

No, please see the previous email, mmap doesn't increment uprobe->ref.

But this doesn't matter. Even if it did, the new vma will not add the
new uprobes, we are going to change the virtual address of the already
existing mapping.

As for mm->uprobes_state.count, move_vma()->do_munmap(old_addr, old_len)
won't change it afaics, is_swbp_at_addr() can't be true after
move_page_tables()->ptep_get_and_clear(old_addr), the page with "int3"
was already moved.

Anyway, this uprobe_mmap() always fails. And we need more fixes, I hope
to send more patches soon.

> That said, I cannot actually find the uprobe_munmap() from do_munmap(),
> but that might be due to lack of wakefulness etc..

do_munmap()->unmap_region()->unmap_vmas()->unmap_single_vma()

Yes, I can't keep in mind this path too ;)

Oleg.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/