mirror of
https://github.com/torvalds/linux.git
synced 2026-08-16 12:30:06 +02:00
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> |
||
|---|---|---|
| .. | ||
| .gitignore | ||
| charge_reserved_hugetlb.sh | ||
| compaction_test.c | ||
| config | ||
| gup_benchmark.c | ||
| hmm-tests.c | ||
| hugepage-mmap.c | ||
| hugepage-shm.c | ||
| hugetlb_reparenting_test.sh | ||
| khugepaged.c | ||
| Makefile | ||
| map_fixed_noreplace.c | ||
| map_hugetlb.c | ||
| map_populate.c | ||
| mlock-random-test.c | ||
| mlock2-tests.c | ||
| mlock2.h | ||
| mremap_dontunmap.c | ||
| on-fault-limit.c | ||
| pkey-helpers.h | ||
| pkey-powerpc.h | ||
| pkey-x86.h | ||
| protection_keys.c | ||
| run_vmtests | ||
| test_hmm.sh | ||
| test_vmalloc.sh | ||
| thuge-gen.c | ||
| transhuge-stress.c | ||
| userfaultfd.c | ||
| va_128TBswitch.c | ||
| virtual_address_range.c | ||
| write_hugetlb_memory.sh | ||
| write_to_hugetlbfs.c | ||