| From: Alexander Potapenko <glider@google.com> |
| Subject: kmsan: add memsetXX tests |
| Date: Fri, 3 Mar 2023 15:14:33 +0100 |
| |
| Add tests ensuring that memset16()/memset32()/memset64() are instrumented |
| by KMSAN and correctly initialize the memory. |
| |
| Link: https://lkml.kernel.org/r/20230303141433.3422671-4-glider@google.com |
| Signed-off-by: Alexander Potapenko <glider@google.com> |
| Reviewed-by: Marco Elver <elver@google.com> |
| Cc: Daniel Vetter <daniel@ffwll.ch> |
| Cc: Geert Uytterhoeven <geert@linux-m68k.org> |
| Cc: Helge Deller <deller@gmx.de> |
| Cc: Kees Cook <keescook@chromium.org> |
| Cc: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| mm/kmsan/kmsan_test.c | 22 ++++++++++++++++++++++ |
| 1 file changed, 22 insertions(+) |
| |
| --- a/mm/kmsan/kmsan_test.c~kmsan-add-memsetxx-tests |
| +++ a/mm/kmsan/kmsan_test.c |
| @@ -504,6 +504,25 @@ static void test_memcpy_aligned_to_unali |
| KUNIT_EXPECT_TRUE(test, report_matches(&expect)); |
| } |
| |
| +/* Generate test cases for memset16(), memset32(), memset64(). */ |
| +#define DEFINE_TEST_MEMSETXX(size) \ |
| + static void test_memset##size(struct kunit *test) \ |
| + { \ |
| + EXPECTATION_NO_REPORT(expect); \ |
| + volatile uint##size##_t uninit; \ |
| + \ |
| + kunit_info(test, \ |
| + "memset" #size "() should initialize memory\n"); \ |
| + DO_NOT_OPTIMIZE(uninit); \ |
| + memset##size((uint##size##_t *)&uninit, 0, 1); \ |
| + kmsan_check_memory((void *)&uninit, sizeof(uninit)); \ |
| + KUNIT_EXPECT_TRUE(test, report_matches(&expect)); \ |
| + } |
| + |
| +DEFINE_TEST_MEMSETXX(16) |
| +DEFINE_TEST_MEMSETXX(32) |
| +DEFINE_TEST_MEMSETXX(64) |
| + |
| static noinline void fibonacci(int *array, int size, int start) |
| { |
| if (start < 2 || (start == size)) |
| @@ -550,6 +569,9 @@ static struct kunit_case kmsan_test_case |
| KUNIT_CASE(test_memcpy_aligned_to_aligned), |
| KUNIT_CASE(test_memcpy_aligned_to_unaligned), |
| KUNIT_CASE(test_memcpy_aligned_to_unaligned2), |
| + KUNIT_CASE(test_memset16), |
| + KUNIT_CASE(test_memset32), |
| + KUNIT_CASE(test_memset64), |
| KUNIT_CASE(test_long_origin_chain), |
| {}, |
| }; |
| _ |