kasan: introduce kasan_mempool_unpoison_pages
[linux-2.6-microblaze.git] / mm / kasan / kasan_test.c
index b61cc6a..34515a1 100644 (file)
@@ -5,7 +5,7 @@
  * Author: Andrey Ryabinin <a.ryabinin@samsung.com>
  */
 
-#define pr_fmt(fmt) "kasan_test: " fmt
+#define pr_fmt(fmt) "kasantest: " fmt
 
 #include <kunit/test.h>
 #include <linux/bitops.h>
@@ -91,10 +91,11 @@ static void kasan_test_exit(struct kunit *test)
 }
 
 /**
- * KUNIT_EXPECT_KASAN_FAIL() - check that the executed expression produces a
- * KASAN report; causes a test failure otherwise. This relies on a KUnit
- * resource named "kasan_status". Do not use this name for KUnit resources
- * outside of KASAN tests.
+ * KUNIT_EXPECT_KASAN_FAIL - check that the executed expression produces a
+ * KASAN report; causes a KUnit test failure otherwise.
+ *
+ * @test: Currently executing KUnit test.
+ * @expression: Expression that must produce a KASAN report.
  *
  * For hardware tag-based KASAN, when a synchronous tag fault happens, tag
  * checking is auto-disabled. When this happens, this test handler reenables
@@ -492,14 +493,17 @@ static void kmalloc_oob_memset_2(struct kunit *test)
 {
        char *ptr;
        size_t size = 128 - KASAN_GRANULE_SIZE;
+       size_t memset_size = 2;
 
        KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test);
 
        ptr = kmalloc(size, GFP_KERNEL);
        KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr);
 
+       OPTIMIZER_HIDE_VAR(ptr);
        OPTIMIZER_HIDE_VAR(size);
-       KUNIT_EXPECT_KASAN_FAIL(test, memset(ptr + size - 1, 0, 2));
+       OPTIMIZER_HIDE_VAR(memset_size);
+       KUNIT_EXPECT_KASAN_FAIL(test, memset(ptr + size - 1, 0, memset_size));
        kfree(ptr);
 }
 
@@ -507,14 +511,17 @@ static void kmalloc_oob_memset_4(struct kunit *test)
 {
        char *ptr;
        size_t size = 128 - KASAN_GRANULE_SIZE;
+       size_t memset_size = 4;
 
        KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test);
 
        ptr = kmalloc(size, GFP_KERNEL);
        KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr);
 
+       OPTIMIZER_HIDE_VAR(ptr);
        OPTIMIZER_HIDE_VAR(size);
-       KUNIT_EXPECT_KASAN_FAIL(test, memset(ptr + size - 3, 0, 4));
+       OPTIMIZER_HIDE_VAR(memset_size);
+       KUNIT_EXPECT_KASAN_FAIL(test, memset(ptr + size - 3, 0, memset_size));
        kfree(ptr);
 }
 
@@ -522,14 +529,17 @@ static void kmalloc_oob_memset_8(struct kunit *test)
 {
        char *ptr;
        size_t size = 128 - KASAN_GRANULE_SIZE;
+       size_t memset_size = 8;
 
        KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test);
 
        ptr = kmalloc(size, GFP_KERNEL);
        KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr);
 
+       OPTIMIZER_HIDE_VAR(ptr);
        OPTIMIZER_HIDE_VAR(size);
-       KUNIT_EXPECT_KASAN_FAIL(test, memset(ptr + size - 7, 0, 8));
+       OPTIMIZER_HIDE_VAR(memset_size);
+       KUNIT_EXPECT_KASAN_FAIL(test, memset(ptr + size - 7, 0, memset_size));
        kfree(ptr);
 }
 
@@ -537,14 +547,17 @@ static void kmalloc_oob_memset_16(struct kunit *test)
 {
        char *ptr;
        size_t size = 128 - KASAN_GRANULE_SIZE;
+       size_t memset_size = 16;
 
        KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test);
 
        ptr = kmalloc(size, GFP_KERNEL);
        KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr);
 
+       OPTIMIZER_HIDE_VAR(ptr);
        OPTIMIZER_HIDE_VAR(size);
-       KUNIT_EXPECT_KASAN_FAIL(test, memset(ptr + size - 15, 0, 16));
+       OPTIMIZER_HIDE_VAR(memset_size);
+       KUNIT_EXPECT_KASAN_FAIL(test, memset(ptr + size - 15, 0, memset_size));
        kfree(ptr);
 }
 
@@ -1097,11 +1110,9 @@ static void kasan_bitops_test_and_modify(struct kunit *test, int nr, void *addr)
        KUNIT_EXPECT_KASAN_FAIL(test, test_and_change_bit(nr, addr));
        KUNIT_EXPECT_KASAN_FAIL(test, __test_and_change_bit(nr, addr));
        KUNIT_EXPECT_KASAN_FAIL(test, kasan_int_result = test_bit(nr, addr));
-
-#if defined(clear_bit_unlock_is_negative_byte)
-       KUNIT_EXPECT_KASAN_FAIL(test, kasan_int_result =
-                               clear_bit_unlock_is_negative_byte(nr, addr));
-#endif
+       if (nr < 7)
+               KUNIT_EXPECT_KASAN_FAIL(test, kasan_int_result =
+                               xor_unlock_is_negative_byte(1 << nr, addr));
 }
 
 static void kasan_bitops_generic(struct kunit *test)