• Axel Rasmussen's avatar
    userfaultfd: selftests: fix SIGSEGV if huge mmap fails · 573a2593
    Axel Rasmussen authored
    The error handling in hugetlb_allocate_area() was incorrect for the
    hugetlb_shared test case.
    
    Previously the behavior was:
    
    - mmap a hugetlb area
      - If this fails, set the pointer to NULL, and carry on
    - mmap an alias of the same hugetlb fd
      - If this fails, munmap the original area
    
    If the original mmap failed, it's likely the second one did too.  If
    both failed, we'd blindly try to munmap a NULL pointer, causing a
    SIGSEGV.  Instead, "goto fail" so we return before trying to mmap the
    alias.
    
    This issue can be hit "in real life" by forgetting to set
    /proc/sys/vm/nr_hugepages (leaving it at 0), and then trying to run the
    hugetlb_shared test.
    
    Another small improvement is, when the original mmap fails, don't just
    print "it failed": perror(), so we can see *why*.  :)
    Signed-off-by: default avatarAxel Rasmussen <axelrasmussen@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Cc: Shuah Khan <shuah@kernel.org>
    Cc: Peter Xu <peterx@redhat.com>
    Cc: Joe Perches <joe@perches.com>
    Cc: Mike Rapoport <rppt@linux.vnet.ibm.com>
    Cc: Andrea Arcangeli <aarcange@redhat.com>
    Cc: David Alan Gilbert <dgilbert@redhat.com>
    Link: https://lkml.kernel.org/r/20201204203443.2714693-1-axelrasmussen@google.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    573a2593
userfaultfd.c 38.1 KB