From: Guenter Roeck <linux@roeck-us.net>
To: Kees Cook <keescook@chromium.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
Nathan Chancellor <nathan@kernel.org>,
linux-hardening@vger.kernel.org, David Gow <davidgow@google.com>,
Nick Desaulniers <ndesaulniers@google.com>,
Josh Poimboeuf <jpoimboe@kernel.org>,
Geert Uytterhoeven <geert+renesas@glider.be>,
Miguel Ojeda <ojeda@kernel.org>,
Isabella Basso <isabbasso@riseup.net>,
Vlastimil Babka <vbabka@suse.cz>,
Dan Williams <dan.j.williams@intel.com>,
Rasmus Villemoes <linux@rasmusvillemoes.dk>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] kunit: memcpy: Split slow memcpy tests into MEMCPY_SLOW_KUNIT_TEST
Date: Fri, 6 Jan 2023 20:36:47 -0800 [thread overview]
Message-ID: <20230107043647.GA605829@roeck-us.net> (raw)
In-Reply-To: <20230107040203.never.112-kees@kernel.org>
On Fri, Jan 06, 2023 at 08:02:07PM -0800, Kees Cook wrote:
> 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
> 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>
> ---
> Guenter, does this give you the needed flexibility to turn on the memcpy
> kunit tests again in your slower environments?
I'll be traveling this weekend. Give me until early next week to give
it a try.
Thanks,
Guenter
> ---
> lib/Kconfig.debug | 9 +++++++++
> lib/memcpy_kunit.c | 17 +++++++++++++----
> 2 files changed, 22 insertions(+), 4 deletions(-)
>
> diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
> index c2c78d0e761c..b5e94807f41c 100644
> --- a/lib/Kconfig.debug
> +++ b/lib/Kconfig.debug
> @@ -2621,6 +2621,15 @@ config MEMCPY_KUNIT_TEST
>
> If unsure, say N.
>
> +config MEMCPY_SLOW_KUNIT_TEST
> + tristate "Include exhaustive memcpy tests" if !KUNIT_ALL_TESTS
> + depends on MEMCPY_KUNIT_TEST
> + default KUNIT_ALL_TESTS
> + 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.
> +
> config IS_SIGNED_TYPE_KUNIT_TEST
> tristate "Test is_signed_type() macro" if !KUNIT_ALL_TESTS
> depends on KUNIT
> diff --git a/lib/memcpy_kunit.c b/lib/memcpy_kunit.c
> index 89128551448d..cc1f36335a9b 100644
> --- a/lib/memcpy_kunit.c
> +++ b/lib/memcpy_kunit.c
> @@ -307,8 +307,12 @@ static void set_random_nonzero(struct kunit *test, u8 *byte)
> }
> }
>
> -static void init_large(struct kunit *test)
> +static int 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");
> + return -EBUSY;
> + }
>
> /* Get many bit patterns. */
> get_random_bytes(large_src, ARRAY_SIZE(large_src));
> @@ -319,6 +323,8 @@ static void init_large(struct kunit *test)
>
> /* Explicitly zero the entire destination. */
> memset(large_dst, 0, ARRAY_SIZE(large_dst));
> +
> + return 0;
> }
>
> /*
> @@ -327,7 +333,9 @@ static void init_large(struct kunit *test)
> */
> static void copy_large_test(struct kunit *test, bool use_memmove)
> {
> - init_large(test);
> +
> + if (init_large(test))
> + return;
>
> /* Copy a growing number of non-overlapping bytes ... */
> for (int bytes = 1; bytes <= ARRAY_SIZE(large_src); bytes++) {
> @@ -472,7 +480,8 @@ static void memmove_overlap_test(struct kunit *test)
> static const int bytes_start = 1;
> static const int bytes_end = ARRAY_SIZE(large_src) + 1;
>
> - init_large(test);
> + if (init_large(test))
> + return;
>
> /* Copy a growing number of overlapping bytes ... */
> for (int bytes = bytes_start; bytes < bytes_end;
> @@ -549,8 +558,8 @@ static void strtomem_test(struct kunit *test)
> static struct kunit_case memcpy_test_cases[] = {
> KUNIT_CASE(memset_test),
> KUNIT_CASE(memcpy_test),
> - KUNIT_CASE(memcpy_large_test),
> KUNIT_CASE(memmove_test),
> + KUNIT_CASE(memcpy_large_test),
> KUNIT_CASE(memmove_large_test),
> KUNIT_CASE(memmove_overlap_test),
> KUNIT_CASE(strtomem_test),
> --
> 2.34.1
>
next prev parent reply other threads:[~2023-01-07 4:36 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-07 4:02 [PATCH] kunit: memcpy: Split slow memcpy tests into MEMCPY_SLOW_KUNIT_TEST Kees Cook
2023-01-07 4:36 ` Guenter Roeck [this message]
2023-01-07 10:55 ` Geert Uytterhoeven
2023-01-10 7:51 ` Vlastimil Babka
2023-01-10 20:38 ` Daniel Latypov
2023-01-09 23:49 ` Nick Desaulniers
2023-01-10 0:11 ` Guenter Roeck
2023-01-11 7:18 ` David Gow
-- strict thread matches above, loose matches on Subject: below --
2023-01-07 15:38 kernel test robot
2023-01-14 0:54 Kees Cook
2023-01-14 0:57 ` Kees Cook
2023-01-14 1:38 ` Daniel Latypov
2023-01-14 4:31 ` David Gow
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230107043647.GA605829@roeck-us.net \
--to=linux@roeck-us.net \
--cc=akpm@linux-foundation.org \
--cc=dan.j.williams@intel.com \
--cc=davidgow@google.com \
--cc=geert+renesas@glider.be \
--cc=isabbasso@riseup.net \
--cc=jpoimboe@kernel.org \
--cc=keescook@chromium.org \
--cc=linux-hardening@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@rasmusvillemoes.dk \
--cc=nathan@kernel.org \
--cc=ndesaulniers@google.com \
--cc=ojeda@kernel.org \
--cc=vbabka@suse.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.