https://github.com/torvalds/linux
Revision 573a259336f8c57739bdaf035aa7abbae7d9a713 authored by Axel Rasmussen on 06 December 2020, 06:15:05 UTC, committed by Linus Torvalds on 06 December 2020, 18:19:07 UTC
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: Axel Rasmussen <axelrasmussen@google.com>
Signed-off-by: Andrew 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.com
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent d8cbe8b
History
Tip revision: 573a259336f8c57739bdaf035aa7abbae7d9a713 authored by Axel Rasmussen on 06 December 2020, 06:15:05 UTC
userfaultfd: selftests: fix SIGSEGV if huge mmap fails
Tip revision: 573a259
File Mode Size
fallbacks
atomic-tbl.sh -rwxr-xr-x 3.3 KB
atomics.tbl -rwxr-xr-x 1.1 KB
check-atomics.sh -rwxr-xr-x 757 bytes
gen-atomic-fallback.sh -rwxr-xr-x 5.2 KB
gen-atomic-instrumented.sh -rwxr-xr-x 4.6 KB
gen-atomic-long.sh -rwxr-xr-x 2.2 KB
gen-atomics.sh -rw-r--r-- 680 bytes

back to top