kunit: memcpy: Split slow memcpy tests into MEMCPY_SLOW_KUNIT_TEST
authorKees Cook <keescook@chromium.org>
Sat, 7 Jan 2023 03:47:05 +0000 (19:47 -0800)
committerKees Cook <keescook@chromium.org>
Wed, 25 Jan 2023 20:24:40 +0000 (12:24 -0800)
Since the long memcpy tests may stall a system for tens of seconds
in virtualized architecture environments, split those tests off under
CONFIG_MEMCPY_SLOW_KUNIT_TEST so they can be separately disabled.

Reported-by: Guenter Roeck <linux@roeck-us.net>
Link: https://lore.kernel.org/lkml/20221226195206.GA2626419@roeck-us.net
Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
Reviewed-and-tested-by: Guenter Roeck <linux@roeck-us.net>
Reviewed-by: David Gow <davidgow@google.com>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Nathan Chancellor <nathan@kernel.org>
Cc: linux-hardening@vger.kernel.org
Signed-off-by: Kees Cook <keescook@chromium.org>
lib/Kconfig.debug
lib/memcpy_kunit.c

index 881c3f84e88a32da05751dad0b54c0fbca5468e7..149d6403b8a9b1e057c5a9570ee71c494b04f66b 100644 (file)
@@ -2566,6 +2566,15 @@ config MEMCPY_KUNIT_TEST
 
          If unsure, say N.
 
+config MEMCPY_SLOW_KUNIT_TEST
+       bool "Include exhaustive memcpy tests"
+       depends on MEMCPY_KUNIT_TEST
+       default y
+       help
+         Some memcpy tests are quite exhaustive in checking for overlaps
+         and bit ranges. These can be very slow, so they are split out
+         as a separate config, in case they need to be disabled.
+
 config IS_SIGNED_TYPE_KUNIT_TEST
        tristate "Test is_signed_type() macro" if !KUNIT_ALL_TESTS
        depends on KUNIT
index 89128551448d10a83e7e96a0adad2a613d36a30e..887926f0473124684ea006f6de22cb92250b455f 100644 (file)
@@ -309,6 +309,8 @@ static void set_random_nonzero(struct kunit *test, u8 *byte)
 
 static void init_large(struct kunit *test)
 {
+       if (!IS_ENABLED(CONFIG_MEMCPY_SLOW_KUNIT_TEST))
+               kunit_skip(test, "Slow test skipped. Enable with CONFIG_MEMCPY_SLOW_KUNIT_TEST=y");
 
        /* Get many bit patterns. */
        get_random_bytes(large_src, ARRAY_SIZE(large_src));