| From 0db282ba2c12c1515d490d14a1ff696643ab0f1b Mon Sep 17 00:00:00 2001 |
| From: Peter Collingbourne <pcc@google.com> |
| Date: Fri, 23 Jul 2021 15:50:04 -0700 |
| Subject: selftest: use mmap instead of posix_memalign to allocate memory |
| |
| From: Peter Collingbourne <pcc@google.com> |
| |
| commit 0db282ba2c12c1515d490d14a1ff696643ab0f1b upstream. |
| |
| This test passes pointers obtained from anon_allocate_area to the |
| userfaultfd and mremap APIs. This causes a problem if the system |
| allocator returns tagged pointers because with the tagged address ABI |
| the kernel rejects tagged addresses passed to these APIs, which would |
| end up causing the test to fail. To make this test compatible with such |
| system allocators, stop using the system allocator to allocate memory in |
| anon_allocate_area, and instead just use mmap. |
| |
| Link: https://lkml.kernel.org/r/20210714195437.118982-3-pcc@google.com |
| Link: https://linux-review.googlesource.com/id/Icac91064fcd923f77a83e8e133f8631c5b8fc241 |
| Fixes: c47174fc362a ("userfaultfd: selftest") |
| Co-developed-by: Lokesh Gidra <lokeshgidra@google.com> |
| Signed-off-by: Lokesh Gidra <lokeshgidra@google.com> |
| Signed-off-by: Peter Collingbourne <pcc@google.com> |
| Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> |
| Cc: Vincenzo Frascino <vincenzo.frascino@arm.com> |
| Cc: Dave Martin <Dave.Martin@arm.com> |
| Cc: Will Deacon <will@kernel.org> |
| Cc: Andrea Arcangeli <aarcange@redhat.com> |
| Cc: Alistair Delva <adelva@google.com> |
| Cc: William McVicker <willmcvicker@google.com> |
| Cc: Evgenii Stepanov <eugenis@google.com> |
| Cc: Mitch Phillips <mitchp@google.com> |
| Cc: Andrey Konovalov <andreyknvl@gmail.com> |
| Cc: <stable@vger.kernel.org> [5.4] |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| tools/testing/selftests/vm/userfaultfd.c | 6 ++++-- |
| 1 file changed, 4 insertions(+), 2 deletions(-) |
| |
| --- a/tools/testing/selftests/vm/userfaultfd.c |
| +++ b/tools/testing/selftests/vm/userfaultfd.c |
| @@ -197,8 +197,10 @@ static int anon_release_pages(char *rel_ |
| |
| static void anon_allocate_area(void **alloc_area) |
| { |
| - if (posix_memalign(alloc_area, page_size, nr_pages * page_size)) { |
| - fprintf(stderr, "out of memory\n"); |
| + *alloc_area = mmap(NULL, nr_pages * page_size, PROT_READ | PROT_WRITE, |
| + MAP_ANONYMOUS | MAP_PRIVATE, -1, 0); |
| + if (*alloc_area == MAP_FAILED) |
| + fprintf(stderr, "mmap of anonymous memory failed"); |
| *alloc_area = NULL; |
| } |
| } |