]> git.baikalelectronics.ru Git - kernel.git/commitdiff
lib/test_meminit: add checks for the allocation functions
authorXiaoke Wang <xkernel.wang@foxmail.com>
Fri, 4 Mar 2022 09:12:15 +0000 (17:12 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Thu, 13 Oct 2022 01:51:49 +0000 (18:51 -0700)
alloc_pages(), kmalloc() and vmalloc() are all memory allocation functions
which can return NULL when some internal memory failures happen.  So it is
better to check the return of them to catch the failure in time for better
test them.

Link: https://lkml.kernel.org/r/tencent_D44A49FFB420EDCCBFB9221C8D14DFE12908@qq.com
Signed-off-by: Xiaoke Wang <xkernel.wang@foxmail.com>
Reviewed-by: Alexander Potapenko <glider@google.com>
Cc: Andrey Konovalov <andreyknvl@gmail.com>
Cc: Andrey Ryabinin <ryabinin.a.a@gmail.com>
Cc: Dmitry Vyukov <dvyukov@google.com>
Cc: Marco Elver <elver@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
lib/test_meminit.c

index c95db11a690648a7cd424a83a6840647455ed04e..60e1984c060facca2db2e28ade9c3dddbf1627a6 100644 (file)
@@ -67,17 +67,24 @@ static int __init do_alloc_pages_order(int order, int *total_failures)
        size_t size = PAGE_SIZE << order;
 
        page = alloc_pages(GFP_KERNEL, order);
+       if (!page)
+               goto err;
        buf = page_address(page);
        fill_with_garbage(buf, size);
        __free_pages(page, order);
 
        page = alloc_pages(GFP_KERNEL, order);
+       if (!page)
+               goto err;
        buf = page_address(page);
        if (count_nonzero_bytes(buf, size))
                (*total_failures)++;
        fill_with_garbage(buf, size);
        __free_pages(page, order);
        return 1;
+err:
+       (*total_failures)++;
+       return 1;
 }
 
 /* Test the page allocator by calling alloc_pages with different orders. */
@@ -100,15 +107,22 @@ static int __init do_kmalloc_size(size_t size, int *total_failures)
        void *buf;
 
        buf = kmalloc(size, GFP_KERNEL);
+       if (!buf)
+               goto err;
        fill_with_garbage(buf, size);
        kfree(buf);
 
        buf = kmalloc(size, GFP_KERNEL);
+       if (!buf)
+               goto err;
        if (count_nonzero_bytes(buf, size))
                (*total_failures)++;
        fill_with_garbage(buf, size);
        kfree(buf);
        return 1;
+err:
+       (*total_failures)++;
+       return 1;
 }
 
 /* Test vmalloc() with given parameters. */
@@ -117,15 +131,22 @@ static int __init do_vmalloc_size(size_t size, int *total_failures)
        void *buf;
 
        buf = vmalloc(size);
+       if (!buf)
+               goto err;
        fill_with_garbage(buf, size);
        vfree(buf);
 
        buf = vmalloc(size);
+       if (!buf)
+               goto err;
        if (count_nonzero_bytes(buf, size))
                (*total_failures)++;
        fill_with_garbage(buf, size);
        vfree(buf);
        return 1;
+err:
+       (*total_failures)++;
+       return 1;
 }
 
 /* Test kmalloc()/vmalloc() by allocating objects of different sizes. */