Thread (51 messages) flat view 51 messages, 7 authors, 2021-01-15

Re: [PATCH 09/11] kasan: fix memory corruption in kasan_bitops_tags test

From: Alexander Potapenko <glider@google.com>
Date: 2021-01-13 12:31:33
Also in: linux-arm-kernel, lkml

On Tue, Jan 12, 2021 at 9:07 PM 'Andrey Konovalov' via kasan-dev
[off-list ref] wrote:
On Tue, Jan 12, 2021 at 9:30 AM Alexander Potapenko [off-list ref] wrote:
quoted
On Tue, Jan 5, 2021 at 7:28 PM Andrey Konovalov [off-list ref] wrote:
quoted
Since the hardware tag-based KASAN mode might not have a redzone that
comes after an allocated object (when kasan.mode=prod is enabled), the
kasan_bitops_tags() test ends up corrupting the next object in memory.

Change the test so it always accesses the redzone that lies within the
allocated object's boundaries.

Signed-off-by: Andrey Konovalov <redacted>
Link: https://linux-review.googlesource.com/id/I67f51d1ee48f0a8d0fe2658c2a39e4879fe0832a
Reviewed-by: Alexander Potapenko <glider@google.com>
quoted
quoted
---
 lib/test_kasan.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/lib/test_kasan.c b/lib/test_kasan.c
index b67da7f6e17f..3ea52da52714 100644
--- a/lib/test_kasan.c
+++ b/lib/test_kasan.c
@@ -771,17 +771,17 @@ static void kasan_bitops_tags(struct kunit *test)

        /* This test is specifically crafted for the tag-based mode. */
        if (IS_ENABLED(CONFIG_KASAN_GENERIC)) {
-               kunit_info(test, "skipping, CONFIG_KASAN_SW_TAGS required");
+               kunit_info(test, "skipping, CONFIG_KASAN_SW/HW_TAGS required");
                return;
        }

-       /* Allocation size will be rounded to up granule size, which is 16. */
-       bits = kzalloc(sizeof(*bits), GFP_KERNEL);
+       /* kmalloc-64 cache will be used and the last 16 bytes will be the redzone. */
+       bits = kzalloc(48, GFP_KERNEL);
I think it might make sense to call ksize() here to ensure we have
these spare bytes.
Calling ksize() will unpoison the whole object.
Ah, that's right.
I think it's OK to make assumptions about KASAN internals in tests. I
would actually say that we need more tests that check such internal
properties.
Agreed.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help