[LTP] [PATCH] cve-2017-17052: tolerate ENOMEM during test

Li Wang liwang@redhat.com
Thu Jan 29 11:08:45 CET 2026


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;



-- 
Regards,
Li Wang



More information about the ltp mailing list