Merge tag 'hardening-v6.2-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/kees...
[sfrench/cifs-2.6.git] / mm / kasan / kasan_test.c
index d1439669d6bc57856607d2d928423c9804e7ec4f..74cd80c12b251ac980e77e27eda9d20052769d08 100644 (file)
@@ -825,23 +825,30 @@ static void kasan_global_oob_left(struct kunit *test)
        KUNIT_EXPECT_KASAN_FAIL(test, *(volatile char *)p);
 }
 
-/* Check that ksize() makes the whole object accessible. */
+/* Check that ksize() does NOT unpoison whole object. */
 static void ksize_unpoisons_memory(struct kunit *test)
 {
        char *ptr;
-       size_t size = 123, real_size;
+       size_t size = 128 - KASAN_GRANULE_SIZE - 5;
+       size_t real_size;
 
        ptr = kmalloc(size, GFP_KERNEL);
        KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr);
+
        real_size = ksize(ptr);
+       KUNIT_EXPECT_GT(test, real_size, size);
 
        OPTIMIZER_HIDE_VAR(ptr);
 
-       /* This access shouldn't trigger a KASAN report. */
-       ptr[size] = 'x';
+       /* These accesses shouldn't trigger a KASAN report. */
+       ptr[0] = 'x';
+       ptr[size - 1] = 'x';
 
-       /* This one must. */
-       KUNIT_EXPECT_KASAN_FAIL(test, ((volatile char *)ptr)[real_size]);
+       /* These must trigger a KASAN report. */
+       if (IS_ENABLED(CONFIG_KASAN_GENERIC))
+               KUNIT_EXPECT_KASAN_FAIL(test, ((volatile char *)ptr)[size]);
+       KUNIT_EXPECT_KASAN_FAIL(test, ((volatile char *)ptr)[size + 5]);
+       KUNIT_EXPECT_KASAN_FAIL(test, ((volatile char *)ptr)[real_size - 1]);
 
        kfree(ptr);
 }