lkml.org 
[lkml]   [2020]   [Feb]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH RESEND v6 10/16] userfaultfd: Don't retake mmap_sem to emulate NOPAGE
    Date
    This patch removes the risk path in handle_userfault() then we will be
    sure that the callers of handle_mm_fault() will know that the VMAs
    might have changed. Meanwhile with previous patch we don't lose
    responsiveness as well since the core mm code now can handle the
    nonfatal userspace signals even if we return VM_FAULT_RETRY.

    Suggested-by: Andrea Arcangeli <aarcange@redhat.com>
    Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
    Reviewed-by: Jerome Glisse <jglisse@redhat.com>
    Signed-off-by: Peter Xu <peterx@redhat.com>
    ---
    fs/userfaultfd.c | 24 ------------------------
    1 file changed, 24 deletions(-)

    diff --git a/fs/userfaultfd.c b/fs/userfaultfd.c
    index 37df7c9eedb1..888272621f38 100644
    --- a/fs/userfaultfd.c
    +++ b/fs/userfaultfd.c
    @@ -524,30 +524,6 @@ vm_fault_t handle_userfault(struct vm_fault *vmf, unsigned long reason)

    __set_current_state(TASK_RUNNING);

    - if (return_to_userland) {
    - if (signal_pending(current) &&
    - !fatal_signal_pending(current)) {
    - /*
    - * If we got a SIGSTOP or SIGCONT and this is
    - * a normal userland page fault, just let
    - * userland return so the signal will be
    - * handled and gdb debugging works. The page
    - * fault code immediately after we return from
    - * this function is going to release the
    - * mmap_sem and it's not depending on it
    - * (unlike gup would if we were not to return
    - * VM_FAULT_RETRY).
    - *
    - * If a fatal signal is pending we still take
    - * the streamlined VM_FAULT_RETRY failure path
    - * and there's no need to retake the mmap_sem
    - * in such case.
    - */
    - down_read(&mm->mmap_sem);
    - ret = VM_FAULT_NOPAGE;
    - }
    - }
    -
    /*
    * Here we race with the list_del; list_add in
    * userfaultfd_ctx_read(), however because we don't ever run
    --
    2.24.1
    \
     
     \ /
      Last update: 2020-02-20 17:03    [W:4.477 / U:0.016 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site