On Sat, Jun 5, 2021 at 5:55 PM David Gow <davidgow@xxxxxxxxxx> wrote: > > The KUNIT_EXPECT_KASAN_FAIL() macro currently uses KUNIT_EXPECT_EQ() to > compare fail_data.report_expected and fail_data.report_found. This > always gave a somewhat useless error message on failure, but the > addition of extra compile-time checking with READ_ONCE() has caused it > to get much longer, and be truncated before anything useful is displayed. > > Instead, just check fail_data.report_found by hand (we've just set > report_expected to 'true'), and print a better failure message with > KUNIT_FAIL(). Because of this, report_expected is no longer used > anywhere, and can be removed. > > Beforehand, a failure in: > KUNIT_EXPECT_KASAN_FAIL(test, ((volatile char *)area)[3100]); > would have looked like: > [22:00:34] [FAILED] vmalloc_oob > [22:00:34] # vmalloc_oob: EXPECTATION FAILED at lib/test_kasan.c:991 > [22:00:34] Expected ({ do { extern void __compiletime_assert_705(void) __attribute__((__error__("Unsupported access size for {READ,WRITE}_ONCE()."))); if (!((sizeof(fail_data.report_expected) == sizeof(char) || sizeof(fail_data.repp > [22:00:34] not ok 45 - vmalloc_oob > > With this change, it instead looks like: > [22:04:04] [FAILED] vmalloc_oob > [22:04:04] # vmalloc_oob: EXPECTATION FAILED at lib/test_kasan.c:993 > [22:04:04] KASAN failure expected in "((volatile char *)area)[3100]", but none occurred > [22:04:04] not ok 45 - vmalloc_oob > > Also update the example failure in the documentation to reflect this. > > Signed-off-by: David Gow <davidgow@xxxxxxxxxx> Nice work! Acked-by: Brendan Higgins <brendanhiggins@xxxxxxxxxx>