[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