Message ID | 3773f984cbd64f008af9b03e82fc1b317cda9fda.1628709663.git.andreyknvl@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | kasan: test: avoid crashing the kernel with HW_TAGS | expand |
On Wed, 11 Aug 2021 at 21:23, <andrey.konovalov@linux.dev> wrote: > > From: Andrey Konovalov <andreyknvl@gmail.com> > > Some KASAN tests use global variables to store function returns values > so that the compiler doesn't optimize away these functions. > > ksize_uaf() doesn't call any functions, so it doesn't need to use > kasan_int_result. Use volatile accesses instead, to be consistent with > other similar tests. > > Signed-off-by: Andrey Konovalov <andreyknvl@gmail.com> Reviewed-by: Marco Elver <elver@google.com> Although I do wonder if the compiler might one day mess with the volatile reads. At least this way we might also catch if the compiler messes up volatile reads. ;-) > --- > lib/test_kasan.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/lib/test_kasan.c b/lib/test_kasan.c > index efd0da5c750f..e159d24b3b49 100644 > --- a/lib/test_kasan.c > +++ b/lib/test_kasan.c > @@ -731,8 +731,8 @@ static void ksize_uaf(struct kunit *test) > kfree(ptr); > > KUNIT_EXPECT_KASAN_FAIL(test, ksize(ptr)); > - KUNIT_EXPECT_KASAN_FAIL(test, kasan_int_result = *ptr); > - KUNIT_EXPECT_KASAN_FAIL(test, kasan_int_result = *(ptr + size)); > + KUNIT_EXPECT_KASAN_FAIL(test, ((volatile char *)ptr)[0]); > + KUNIT_EXPECT_KASAN_FAIL(test, ((volatile char *)ptr)[size]); > } > > static void kasan_stack_oob(struct kunit *test) > -- > 2.25.1 >
diff --git a/lib/test_kasan.c b/lib/test_kasan.c index efd0da5c750f..e159d24b3b49 100644 --- a/lib/test_kasan.c +++ b/lib/test_kasan.c @@ -731,8 +731,8 @@ static void ksize_uaf(struct kunit *test) kfree(ptr); KUNIT_EXPECT_KASAN_FAIL(test, ksize(ptr)); - KUNIT_EXPECT_KASAN_FAIL(test, kasan_int_result = *ptr); - KUNIT_EXPECT_KASAN_FAIL(test, kasan_int_result = *(ptr + size)); + KUNIT_EXPECT_KASAN_FAIL(test, ((volatile char *)ptr)[0]); + KUNIT_EXPECT_KASAN_FAIL(test, ((volatile char *)ptr)[size]); } static void kasan_stack_oob(struct kunit *test)