fortify: Allow KUnit test to build without FORTIFY
authorKees Cook <keescook@chromium.org>
Fri, 7 Apr 2023 19:27:08 +0000 (12:27 -0700)
committerKees Cook <keescook@chromium.org>
Thu, 29 Feb 2024 21:38:02 +0000 (13:38 -0800)
In order for CI systems to notice all the skipped tests related to
CONFIG_FORTIFY_SOURCE, allow the FORTIFY_SOURCE KUnit tests to build
with or without CONFIG_FORTIFY_SOURCE.

Signed-off-by: Kees Cook <keescook@chromium.org>
lib/Kconfig.debug
lib/fortify_kunit.c

index 975a07f9f1cc08838d272f83d5f04a85ff2f5cd2..4e2febe3b568d559ac8ce3c7280a0c23df7262da 100644 (file)
@@ -2748,7 +2748,7 @@ config STACKINIT_KUNIT_TEST
 
 config FORTIFY_KUNIT_TEST
        tristate "Test fortified str*() and mem*() function internals at runtime" if !KUNIT_ALL_TESTS
-       depends on KUNIT && FORTIFY_SOURCE
+       depends on KUNIT
        default KUNIT_ALL_TESTS
        help
          Builds unit tests for checking internals of FORTIFY_SOURCE as used
index 2e4fedc816210cc2da5e346b08edaf8417bedb80..7a88b5dd3d27d7aca988adb4d8f05e4684435fc5 100644 (file)
 #include <linux/string.h>
 #include <linux/vmalloc.h>
 
+/* Handle being built without CONFIG_FORTIFY_SOURCE */
+#ifndef __compiletime_strlen
+# define __compiletime_strlen __builtin_strlen
+#endif
+
 static const char array_of_10[] = "this is 10";
 static const char *ptr_of_11 = "this is 11!";
 static char array_unknown[] = "compiler thinks I might change";
@@ -308,6 +313,14 @@ DEFINE_ALLOC_SIZE_TEST_PAIR(kvmalloc)
 } while (0)
 DEFINE_ALLOC_SIZE_TEST_PAIR(devm_kmalloc)
 
+static int fortify_test_init(struct kunit *test)
+{
+       if (!IS_ENABLED(CONFIG_FORTIFY_SOURCE))
+               kunit_skip(test, "Not built with CONFIG_FORTIFY_SOURCE=y");
+
+       return 0;
+}
+
 static struct kunit_case fortify_test_cases[] = {
        KUNIT_CASE(known_sizes_test),
        KUNIT_CASE(control_flow_split_test),
@@ -324,6 +337,7 @@ static struct kunit_case fortify_test_cases[] = {
 
 static struct kunit_suite fortify_test_suite = {
        .name = "fortify",
+       .init = fortify_test_init,
        .test_cases = fortify_test_cases,
 };