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

Re: [PATCH 08/11] kasan: adopt kmalloc_uaf2 test to HW_TAGS mode

From: Andrey Konovalov <hidden>
Date: 2021-01-12 22:00:45
Also in: linux-arm-kernel, lkml

On Tue, Jan 12, 2021 at 2:39 PM Marco Elver [off-list ref] wrote:
On Tue, Jan 05, 2021 at 07:27PM +0100, Andrey Konovalov wrote:
quoted
In the kmalloc_uaf2() test, the pointers to the two allocated memory
blocks might be the same, and the test will fail. With the software
tag-based mode, the probability of the that happening is 1/254, so it's
hard to observe the failure. For the hardware tag-based mode though,
the probablity is 1/14, which is quite noticable.

Allow up to 4 attempts at generating different tags for the tag-based
modes.

Signed-off-by: Andrey Konovalov <redacted>
Link: https://linux-review.googlesource.com/id/Ibfa458ef2804ff465d8eb07434a300bf36388d55
---
 lib/test_kasan.c | 9 +++++++++
 1 file changed, 9 insertions(+)
diff --git a/lib/test_kasan.c b/lib/test_kasan.c
index b5077a47b95a..b67da7f6e17f 100644
--- a/lib/test_kasan.c
+++ b/lib/test_kasan.c
@@ -375,7 +375,9 @@ static void kmalloc_uaf2(struct kunit *test)
 {
      char *ptr1, *ptr2;
      size_t size = 43;
+     int counter = 0;

+again:
      ptr1 = kmalloc(size, GFP_KERNEL);
      KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr1);
@@ -384,6 +386,13 @@ static void kmalloc_uaf2(struct kunit *test)
      ptr2 = kmalloc(size, GFP_KERNEL);
      KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr2);

+     /*
+      * For tag-based KASAN ptr1 and ptr2 tags might happen to be the same.
+      * Allow up to 4 attempts at generating different tags.
+      */
+     if (!IS_ENABLED(CONFIG_KASAN_GENERIC) && ptr1 == ptr2 && counter++ < 4)
+             goto again;
+
Why do we even need a limit? Why not retry until ptr1 != ptr2?
Then the test will hang if it's failing. Let's do up to 16 attempts,
it should be more than enough in practice. Thanks!
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help