From 321e586e46115c69e7e833d592703d997a4ec477 Mon Sep 17 00:00:00 2001 From: Mark Johnston Date: Mon, 3 Jan 2022 11:15:46 -0500 Subject: [PATCH] posixshm tests: Fix occasional largepage_mprotect failures largepage_mprotect maps a superpage and later extends the mapping. This occasionally fails with ASLR disabled. To fix this, first try to reserve a sufficiently large virtual address region. Reported by: Jenkins MFC after: 1 week Sponsored by: The FreeBSD Foundation --- tests/sys/posixshm/posixshm_test.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/tests/sys/posixshm/posixshm_test.c b/tests/sys/posixshm/posixshm_test.c index b460639ba647..e3a4e55b3704 100644 --- a/tests/sys/posixshm/posixshm_test.c +++ b/tests/sys/posixshm/posixshm_test.c @@ -1630,9 +1630,19 @@ ATF_TC_BODY(largepage_mprotect, tc) pscnt = pagesizes(ps); for (int i = 1; i < pscnt; i++) { + /* + * Reserve a contiguous region in the address space to avoid + * spurious failures in the face of ASLR. + */ + addr = mmap(NULL, ps[i] * 2, PROT_NONE, + MAP_ANON | MAP_ALIGNED(ffsl(ps[i]) - 1), -1, 0); + ATF_REQUIRE_MSG(addr != MAP_FAILED, + "mmap(%zu bytes) failed; error=%d", ps[i], errno); + ATF_REQUIRE(munmap(addr, ps[i] * 2) == 0); + fd = shm_open_large(i, SHM_LARGEPAGE_ALLOC_DEFAULT, ps[i]); - addr = mmap(NULL, ps[i], PROT_READ | PROT_WRITE, MAP_SHARED, fd, - 0); + addr = mmap(addr, ps[i], PROT_READ | PROT_WRITE, + MAP_SHARED | MAP_FIXED, fd, 0); ATF_REQUIRE_MSG(addr != MAP_FAILED, "mmap(%zu bytes) failed; error=%d", ps[i], errno);