[LTP] [PATCH] cve-2017-17052: tolerate ENOMEM during test
Petr Vorel
pvorel@suse.cz
Thu Jan 29 14:28:56 CET 2026
Hi Li,
[ Cc others as it's a pre-release ]
> On Thu, Jan 29, 2026 at 6:00 PM Li Wang via ltp <ltp@lists.linux.it> wrote:
> > As each iteration of mmap_thread() grabs a fresh 16 MiB MAP_POPULATE
> > region and never releases it. As the loop runs, those regions
> > accumulate consuming both virtual address space and committed physical
> > memory right away instead of lazily.
> > Easily mmap() fails with ENOMEM on smaller/limit RAM resource system.
> > Error Log:
> > cve-2017-17052.c:48: TBROK: mmap((nil),16777216,PROT_READ(1),32802,-1,0) failed: ENOMEM (12)
> > tst_test.c:479: TINFO: Child process reported TBROK killing the test
> > tst_test.c:1909: TINFO: Killed the leftover descendant processes
> > Consider there is no practical upper bound on this allocation pattern,
> > so setting .test.min_mem_avail may not helps. Here we just tolerate
> > ENOMEM during the mmap_thread() looping.
> > Signed-off-by: Li Wang <liwang@redhat.com>
> > ---
> > testcases/cve/cve-2017-17052.c | 9 ++++++++-
> > 1 file changed, 8 insertions(+), 1 deletion(-)
> > diff --git a/testcases/cve/cve-2017-17052.c b/testcases/cve/cve-2017-17052.c
> > index 700eb782e..61032c197 100644
> > --- a/testcases/cve/cve-2017-17052.c
> > +++ b/testcases/cve/cve-2017-17052.c
> > @@ -44,9 +44,16 @@ static void cleanup(void)
> > static void *mmap_thread(void *arg)
> > {
> > + void *ptr;
> > +
> > for (;;) {
> > - SAFE_MMAP(NULL, 0x1000000, PROT_READ,
> > + ptr = mmap(NULL, 0x1000000, PROT_READ,
> > MAP_POPULATE|MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
> > +
> > + if ((ptr == MAP_FAILED) && (errno == ENOMEM)) {
> > + usleep(1000);
> > + continue;
> > + }
> Oops, I forgot to handle the other failures, so the patch should be:
> --- a/testcases/cve/cve-2017-17052.c
> +++ b/testcases/cve/cve-2017-17052.c
> @@ -44,9 +44,19 @@ static void cleanup(void)
> static void *mmap_thread(void *arg)
> {
> + void *ptr;
> +
> for (;;) {
> - SAFE_MMAP(NULL, 0x1000000, PROT_READ,
> + ptr = mmap(NULL, 0x1000000, PROT_READ,
> MAP_POPULATE|MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
> +
> + if (ptr == MAP_FAILED) {
> + if (errno == ENOMEM) {
> + usleep(1000);
> + continue;
> + }
> + tst_brk(TBROK | TTERRNO, "Unexpected mmap() error");
> + }
> }
> return arg;
Patched version LGTM.
Reviewed-by: Petr Vorel <pvorel@suse.cz>
Out of curiosity how much RAM is not enough for this? I tried 400 MB + eating
other RAM but was not able to trigger.
Kind regards,
Petr
More information about the ltp
mailing list