mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 04:02:20 +00:00
kmsan: introduce test_unpoison_memory()
Add a regression test to ensure that kmsan_unpoison_memory() works the same as an unpoisoning operation added by the instrumentation. The test has two subtests: one that checks the instrumentation, and one that checks kmsan_unpoison_memory(). Each subtest initializes the first byte of a 4-byte buffer, then checks that the other 3 bytes are uninitialized. [glider@google.com: change description, remove comment about failing test case] Link: https://lkml.kernel.org/r/20240528104807.738758-2-glider@google.com Signed-off-by: Brian Johannesmeyer <bjohannesmeyer@gmail.com> Link: https://lore.kernel.org/lkml/20240524232804.1984355-1-bjohannesmeyer@gmail.com/T/ Signed-off-by: Alexander Potapenko <glider@google.com> Cc: Dmitry Vyukov <dvyukov@google.com> Cc: Kees Cook <keescook@chromium.org> Cc: Marco Elver <elver@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
f56810c94c
commit
7005e7ec28
@ -614,6 +614,32 @@ static void test_stackdepot_roundtrip(struct kunit *test)
|
||||
KUNIT_EXPECT_TRUE(test, report_matches(&expect));
|
||||
}
|
||||
|
||||
/*
|
||||
* Test case: ensure that kmsan_unpoison_memory() and the instrumentation work
|
||||
* the same.
|
||||
*/
|
||||
static void test_unpoison_memory(struct kunit *test)
|
||||
{
|
||||
EXPECTATION_UNINIT_VALUE_FN(expect, "test_unpoison_memory");
|
||||
volatile char a[4], b[4];
|
||||
|
||||
kunit_info(
|
||||
test,
|
||||
"unpoisoning via the instrumentation vs. kmsan_unpoison_memory() (2 UMR reports)\n");
|
||||
|
||||
/* Initialize a[0] and check a[1]--a[3]. */
|
||||
a[0] = 0;
|
||||
kmsan_check_memory((char *)&a[1], 3);
|
||||
KUNIT_EXPECT_TRUE(test, report_matches(&expect));
|
||||
|
||||
report_reset();
|
||||
|
||||
/* Initialize b[0] and check b[1]--b[3]. */
|
||||
kmsan_unpoison_memory((char *)&b[0], 1);
|
||||
kmsan_check_memory((char *)&b[1], 3);
|
||||
KUNIT_EXPECT_TRUE(test, report_matches(&expect));
|
||||
}
|
||||
|
||||
static struct kunit_case kmsan_test_cases[] = {
|
||||
KUNIT_CASE(test_uninit_kmalloc),
|
||||
KUNIT_CASE(test_init_kmalloc),
|
||||
@ -637,6 +663,7 @@ static struct kunit_case kmsan_test_cases[] = {
|
||||
KUNIT_CASE(test_memset64),
|
||||
KUNIT_CASE(test_long_origin_chain),
|
||||
KUNIT_CASE(test_stackdepot_roundtrip),
|
||||
KUNIT_CASE(test_unpoison_memory),
|
||||
{},
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user