]> www.infradead.org Git - users/hch/configfs.git/commitdiff
kasan: check kasan_vmalloc_enabled in vmalloc tests
authorAndrey Konovalov <andreyknvl@google.com>
Thu, 21 Dec 2023 20:04:50 +0000 (21:04 +0100)
committerAndrew Morton <akpm@linux-foundation.org>
Fri, 29 Dec 2023 19:58:45 +0000 (11:58 -0800)
Check that vmalloc poisoning is not disabled via command line when running
the vmalloc-related KASAN tests.  Skip the tests otherwise.

Link: https://lkml.kernel.org/r/954456e50ac98519910c3e24a479a18eae62f8dd.1703188911.git.andreyknvl@google.com
Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
Cc: Alexander Potapenko <glider@google.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>
mm/kasan/hw_tags.c
mm/kasan/kasan.h
mm/kasan/kasan_test.c

index 80f11a3eccd5697b42ea5212e2e998046da974bf..2b994092a2d430fbed8868c72f8cd7c1a9f2ee11 100644 (file)
@@ -62,6 +62,7 @@ DEFINE_STATIC_KEY_TRUE(kasan_flag_vmalloc);
 #else
 DEFINE_STATIC_KEY_FALSE(kasan_flag_vmalloc);
 #endif
+EXPORT_SYMBOL_GPL(kasan_flag_vmalloc);
 
 #define PAGE_ALLOC_SAMPLE_DEFAULT      1
 #define PAGE_ALLOC_SAMPLE_ORDER_DEFAULT        3
index dee105ba32dd4c97e29827ae1d5c22db5fd246a9..acc1a9410f0d7d8974947c5b56381555f7156fab 100644 (file)
@@ -83,6 +83,11 @@ static inline bool kasan_sample_page_alloc(unsigned int order)
 
 #else /* CONFIG_KASAN_HW_TAGS */
 
+static inline bool kasan_vmalloc_enabled(void)
+{
+       return IS_ENABLED(CONFIG_KASAN_VMALLOC);
+}
+
 static inline bool kasan_async_fault_possible(void)
 {
        return false;
index aa994b62378b1ad0f264c43beb2f490f8d435aa3..9b1024a6e580ff4057119af43d72f38281c261cc 100644 (file)
@@ -1552,6 +1552,9 @@ static void vmalloc_helpers_tags(struct kunit *test)
 
        KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_VMALLOC);
 
+       if (!kasan_vmalloc_enabled())
+               kunit_skip(test, "Test requires kasan.vmalloc=on");
+
        ptr = vmalloc(PAGE_SIZE);
        KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr);
 
@@ -1586,6 +1589,9 @@ static void vmalloc_oob(struct kunit *test)
 
        KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_VMALLOC);
 
+       if (!kasan_vmalloc_enabled())
+               kunit_skip(test, "Test requires kasan.vmalloc=on");
+
        v_ptr = vmalloc(size);
        KUNIT_ASSERT_NOT_ERR_OR_NULL(test, v_ptr);
 
@@ -1639,6 +1645,9 @@ static void vmap_tags(struct kunit *test)
 
        KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_VMALLOC);
 
+       if (!kasan_vmalloc_enabled())
+               kunit_skip(test, "Test requires kasan.vmalloc=on");
+
        p_page = alloc_pages(GFP_KERNEL, 1);
        KUNIT_ASSERT_NOT_ERR_OR_NULL(test, p_page);
        p_ptr = page_address(p_page);
@@ -1757,7 +1766,7 @@ static void match_all_not_assigned(struct kunit *test)
                free_pages((unsigned long)ptr, order);
        }
 
-       if (!IS_ENABLED(CONFIG_KASAN_VMALLOC))
+       if (!kasan_vmalloc_enabled())
                return;
 
        for (i = 0; i < 256; i++) {