• Oleg Nesterov's avatar
    uprobes: Remove copy_vma()->uprobe_mmap() · 6dab3cc0
    Oleg Nesterov authored
    Remove copy_vma()->uprobe_mmap(new_vma), it is absolutely wrong.
    
    This new_vma was just initialized to represent the new unmapped
    area, [vm_start, vm_end) was returned by get_unmapped_area() in
    the caller.
    
    This means that uprobe_mmap()->get_user_pages() will fail for
    sure, simply because find_vma() can never succeed. And I
    verified that sys_mremap()->mremap_to() indeed always fails with
    the wrong ENOMEM code if [addr, addr+old_len] is probed.
    
    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.
    
    NOTE: However, somehow we need to close the race with
    uprobe_register() which relies on map_info->vaddr. This needs
    another fix I'll try to do later. Probably we need uprobe_mmap()
    in move_vma() but we can not do this right now, this can confuse
    uprobes_state.counter (which I still hope we are going to kill).
    Signed-off-by: default avatarOleg Nesterov <oleg@redhat.com>
    Acked-by: Srikar Dronamraju <srikar.vnet.ibm.com>
    Cc: Anton Arapov <anton@redhat.com>
    Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
    Link: http://lkml.kernel.org/r/20120729182236.GA20342@redhat.comSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    6dab3cc0
mmap.c 70.8 KB