From: Andrea Cervesato via ltp <ltp@lists.linux.it>
To: "Petr Vorel" <pvorel@suse.cz>
Cc: Linux Test Project <ltp@lists.linux.it>
Subject: Re: [LTP] [PATCH 3/3] mmap24: add test for MAP_32BIT address limit
Date: Fri, 11 Sep 2026 15:16:18 +0000 [thread overview]
Message-ID: <6aa41b43.63ed6291.2b47ca.90d9@mx.google.com> (raw)
In-Reply-To: <20260911135907.GC1488703@pevik>
> Hi Andrea,
>
> > Add a test verifying that mmap() with the MAP_32BIT flag restricts
> > mappings to the first 2GB of address space and fails with ENOMEM
> > when the 32-bit address space is exhausted without falling back to
> > higher addresses.
>
> Thanks!
>
> ...
> > +++ b/testcases/kernel/syscalls/mmap/mmap24.c
> ...
> > +
> > + if ((unsigned long)addr + CHUNK_SZ > ADDR_LIMIT) {
> > + tst_res(TFAIL, "mapping at %p + %zu exceeds 2GB limit",
> %zu is wrong on 32 bit.
>
> ../../../../include/tst_test.h:75:55: warning: format ‘%zu’ expects argument of type ‘size_t’, but argument 6 has type ‘long unsigned int’ [-Wformat=]
> 75 | tst_res_(__FILE__, __LINE__, (ttype), (arg_fmt), ##__VA_ARGS__);\
> | ^~~~~~~~~
> mmap24.c:63:25: note: in expansion of macro ‘tst_res’
> 63 | tst_res(TFAIL, "mapping at %p + %zu exceeds 2GB limit",
> | ^~~~~~~
+1
> BTW I was wondering if I can get this failing when running on VM with really
> small RAM, but even with 249 MB I get get mapped 928 MB (or 960 MB when I run
> with -i):
>
> mmap24.c:81: TPASS: Mapped 928 MB across 29 chunks within 2GB before ENOMEM
>
> What am I missing?
Thanks for checking, I didn't verify 32-bits indeed..
I found the reason and it's really tricky. In arch/x86/kernel/sys_x86_64.c,
MAP_32BIT forces the mapping range to:
begin = 0x40000000 (1 GB)
end = 0x80000000 (2 GB)
Which is 1GB max.
And probably the reason why you can "map" 928 MB in a short memory system
is becasuee you are actually seeing virtual memory allocation. The test
is touching just 2 pages instead of all:
((char *)addr)[0] = 'a';
((char *)addr)[CHUNK_SZ - 1] = 'z';
can you try to apply a memset() for the whole allocation and see what
happens? The only problem if I use this method, tho, is that memory might
be swapped out.
I will send a new version with PROT_NONE that is allocating virtual
pages and changing a bit the logic of the final check.
--
Andrea Cervesato
SUSE QE Automation Engineer Linux
andrea.cervesato@suse.com
--
Mailing list info: https://lists.linux.it/listinfo/ltp
next prev parent reply other threads:[~2026-09-11 15:16 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-28 15:36 [LTP] [PATCH 0/3] mmap testing suite to cover MAP_32BIT Andrea Cervesato
2026-08-28 15:36 ` [LTP] [PATCH 1/3] lapi/mmap: add MAP_32BIT fallback Andrea Cervesato
2026-08-28 21:10 ` [LTP] " linuxtestproject.agent
2026-08-31 8:02 ` Andrea Cervesato via ltp
2026-09-11 13:20 ` [LTP] [PATCH 1/3] " Petr Vorel
2026-09-11 13:26 ` Petr Vorel
2026-08-28 15:36 ` [LTP] [PATCH 2/3] mmap23: add test for MAP_32BIT oversized mapping Andrea Cervesato
2026-09-11 14:08 ` Petr Vorel
2026-08-28 15:36 ` [LTP] [PATCH 3/3] mmap24: add test for MAP_32BIT address limit Andrea Cervesato
2026-09-10 14:38 ` Cyril Hrubis
2026-09-11 13:59 ` Petr Vorel
2026-09-11 15:16 ` Andrea Cervesato via ltp [this message]
2026-09-11 16:03 ` Petr Vorel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=6aa41b43.63ed6291.2b47ca.90d9@mx.google.com \
--to=ltp@lists.linux.it \
--cc=andrea.cervesato@suse.com \
--cc=pvorel@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox