[PATCH 2/6] posix: Use mmap for address alignment check in tst-mmap

Muhammad Kamran muhammad.kamran@arm.com
Thu Sep 24 14:35:05 GMT 2026


tst-mmap uses a malloc pointer to construct an address which is not
page-aligned for MAP_FIXED checks.  On AArch64 with MTE, malloc may
return a tagged pointer, but mmap address arguments must be untagged.

Use an anonymous mmap to obtain a page-aligned address instead, and keep
passing address + 1 to the MAP_FIXED checks.
---
 posix/tst-mmap.c | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/posix/tst-mmap.c b/posix/tst-mmap.c
index 5e52b49e35..8f71744a30 100644
--- a/posix/tst-mmap.c
+++ b/posix/tst-mmap.c
@@ -92,12 +92,14 @@ do_test (void)
       result = 1;
     }
 
-  /* Get a valid address.  */
-  mem = malloc (2 * ps);
-  if (mem != NULL)
+  /* Get a valid, page-aligned address.  */
+  mem = mmap (NULL, 2 * ps, PROT_NONE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+  if (mem != MAP_FAILED)
     {
+      void *addr = (char *) mem + 1;
+
       /* Now we map at an address which is not mod pagesize.  */
-      ptr = mmap (mem + 1, 1000, PROT_READ, MAP_SHARED | MAP_FIXED, fd, ps);
+      ptr = mmap (addr, 1000, PROT_READ, MAP_SHARED | MAP_FIXED, fd, ps);
       if (ptr != MAP_FAILED)
 	{
 	  puts ("mapping at address with mod pagesize != 0 succeeded!");
@@ -110,7 +112,7 @@ do_test (void)
 	}
 
       /* Try the same for mmap64.  */
-      ptr = mmap64 (mem + 1, 1000, PROT_READ, MAP_SHARED | MAP_FIXED, fd, ps);
+      ptr = mmap64 (addr, 1000, PROT_READ, MAP_SHARED | MAP_FIXED, fd, ps);
       if (ptr != MAP_FAILED)
 	{
 	  puts ("mapping at address with mod pagesize != 0 succeeded!");
@@ -123,7 +125,7 @@ do_test (void)
 	}
 
       /* And again for MAP_PRIVATE.  */
-      ptr = mmap (mem + 1, 1000, PROT_READ, MAP_PRIVATE | MAP_FIXED, fd, ps);
+      ptr = mmap (addr, 1000, PROT_READ, MAP_PRIVATE | MAP_FIXED, fd, ps);
       if (ptr != MAP_FAILED)
 	{
 	  puts ("mapping at address with mod pagesize != 0 succeeded!");
@@ -136,7 +138,7 @@ do_test (void)
 	}
 
       /* Try the same for mmap64.  */
-      ptr = mmap64 (mem + 1, 1000, PROT_READ, MAP_PRIVATE | MAP_FIXED, fd, ps);
+      ptr = mmap64 (addr, 1000, PROT_READ, MAP_PRIVATE | MAP_FIXED, fd, ps);
       if (ptr != MAP_FAILED)
 	{
 	  puts ("mapping at address with mod pagesize != 0 succeeded!");
@@ -148,7 +150,7 @@ do_test (void)
 	  result = 1;
 	}
 
-      free (mem);
+      munmap (mem, 2 * ps);
     }
 
   /* Now map the memory and see whether the content of the mapped area
-- 
2.43.0



More information about the Libc-alpha mailing list