Lines Matching full:test
8 #define pr_fmt(fmt) "kasan: test: " fmt
10 #include <kunit/test.h>
91 static void kasan_test_exit(struct kunit *test) in kasan_test_exit() argument
93 KUNIT_EXPECT_FALSE(test, READ_ONCE(test_status.report_found)); in kasan_test_exit()
98 * KASAN report; causes a KUnit test failure otherwise.
100 * @test: Currently executing KUnit test.
104 * checking is auto-disabled. When this happens, this test handler reenables
118 #define KUNIT_EXPECT_KASAN_FAIL(test, expression) do { \ argument
122 KUNIT_EXPECT_FALSE(test, READ_ONCE(test_status.report_found)); \
129 KUNIT_FAIL(test, KUNIT_SUBTEST_INDENT "KASAN failure " \
144 #define KASAN_TEST_NEEDS_CONFIG_ON(test, config) do { \ argument
146 kunit_skip((test), "Test requires " #config "=y"); \
149 #define KASAN_TEST_NEEDS_CONFIG_OFF(test, config) do { \ argument
151 kunit_skip((test), "Test requires " #config "=n"); \
154 #define KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test) do { \ argument
160 kunit_skip((test), "Test requires checked mem*()"); \
163 static void kmalloc_oob_right(struct kunit *test) in kmalloc_oob_right() argument
169 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in kmalloc_oob_right()
177 KUNIT_EXPECT_KASAN_FAIL(test, ptr[size] = 'x'); in kmalloc_oob_right()
183 KUNIT_EXPECT_KASAN_FAIL(test, ptr[size + 5] = 'y'); in kmalloc_oob_right()
186 KUNIT_EXPECT_KASAN_FAIL(test, ptr[0] = in kmalloc_oob_right()
192 static void kmalloc_oob_left(struct kunit *test) in kmalloc_oob_left() argument
198 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in kmalloc_oob_left()
201 KUNIT_EXPECT_KASAN_FAIL(test, *ptr = *(ptr - 1)); in kmalloc_oob_left()
205 static void kmalloc_node_oob_right(struct kunit *test) in kmalloc_node_oob_right() argument
211 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in kmalloc_node_oob_right()
214 KUNIT_EXPECT_KASAN_FAIL(test, ptr[0] = ptr[size]); in kmalloc_node_oob_right()
218 static void kmalloc_track_caller_oob_right(struct kunit *test) in kmalloc_track_caller_oob_right() argument
228 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in kmalloc_track_caller_oob_right()
231 KUNIT_EXPECT_KASAN_FAIL(test, ptr[size] = 'y'); in kmalloc_track_caller_oob_right()
240 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in kmalloc_track_caller_oob_right()
243 KUNIT_EXPECT_KASAN_FAIL(test, ptr[size] = 'y'); in kmalloc_track_caller_oob_right()
252 static void kmalloc_big_oob_right(struct kunit *test) in kmalloc_big_oob_right() argument
258 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in kmalloc_big_oob_right()
261 KUNIT_EXPECT_KASAN_FAIL(test, ptr[size] = 0); in kmalloc_big_oob_right()
271 static void kmalloc_large_oob_right(struct kunit *test) in kmalloc_large_oob_right() argument
277 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in kmalloc_large_oob_right()
280 KUNIT_EXPECT_KASAN_FAIL(test, ptr[size + OOB_TAG_OFF] = 0); in kmalloc_large_oob_right()
285 static void kmalloc_large_uaf(struct kunit *test) in kmalloc_large_uaf() argument
291 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in kmalloc_large_uaf()
294 KUNIT_EXPECT_KASAN_FAIL(test, ((volatile char *)ptr)[0]); in kmalloc_large_uaf()
297 static void kmalloc_large_invalid_free(struct kunit *test) in kmalloc_large_invalid_free() argument
303 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in kmalloc_large_invalid_free()
305 KUNIT_EXPECT_KASAN_FAIL(test, kfree(ptr + 1)); in kmalloc_large_invalid_free()
308 static void page_alloc_oob_right(struct kunit *test) in page_alloc_oob_right() argument
320 KASAN_TEST_NEEDS_CONFIG_OFF(test, CONFIG_KASAN_GENERIC); in page_alloc_oob_right()
324 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in page_alloc_oob_right()
326 KUNIT_EXPECT_KASAN_FAIL(test, ptr[0] = ptr[size]); in page_alloc_oob_right()
330 static void page_alloc_uaf(struct kunit *test) in page_alloc_uaf() argument
338 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in page_alloc_uaf()
341 KUNIT_EXPECT_KASAN_FAIL(test, ((volatile char *)ptr)[0]); in page_alloc_uaf()
344 static void krealloc_more_oob_helper(struct kunit *test, in krealloc_more_oob_helper() argument
350 KUNIT_ASSERT_LT(test, size1, size2); in krealloc_more_oob_helper()
354 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr1); in krealloc_more_oob_helper()
357 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr2); in krealloc_more_oob_helper()
370 KUNIT_EXPECT_KASAN_FAIL(test, ptr2[size2] = 'x'); in krealloc_more_oob_helper()
373 KUNIT_EXPECT_KASAN_FAIL(test, in krealloc_more_oob_helper()
379 static void krealloc_less_oob_helper(struct kunit *test, in krealloc_less_oob_helper() argument
385 KUNIT_ASSERT_LT(test, size2, size1); in krealloc_less_oob_helper()
389 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr1); in krealloc_less_oob_helper()
392 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr2); in krealloc_less_oob_helper()
402 KUNIT_EXPECT_KASAN_FAIL(test, ptr2[size2] = 'x'); in krealloc_less_oob_helper()
405 KUNIT_EXPECT_KASAN_FAIL(test, in krealloc_less_oob_helper()
412 KUNIT_EXPECT_LE(test, round_up(size2, KASAN_GRANULE_SIZE), in krealloc_less_oob_helper()
414 KUNIT_EXPECT_LE(test, round_up(middle, KASAN_GRANULE_SIZE), in krealloc_less_oob_helper()
416 KUNIT_EXPECT_KASAN_FAIL(test, ptr2[middle] = 'x'); in krealloc_less_oob_helper()
417 KUNIT_EXPECT_KASAN_FAIL(test, ptr2[size1 - 1] = 'x'); in krealloc_less_oob_helper()
418 KUNIT_EXPECT_KASAN_FAIL(test, ptr2[size1] = 'x'); in krealloc_less_oob_helper()
423 static void krealloc_more_oob(struct kunit *test) in krealloc_more_oob() argument
425 krealloc_more_oob_helper(test, 201, 235); in krealloc_more_oob()
428 static void krealloc_less_oob(struct kunit *test) in krealloc_less_oob() argument
430 krealloc_less_oob_helper(test, 235, 201); in krealloc_less_oob()
433 static void krealloc_large_more_oob(struct kunit *test) in krealloc_large_more_oob() argument
435 krealloc_more_oob_helper(test, KMALLOC_MAX_CACHE_SIZE + 201, in krealloc_large_more_oob()
439 static void krealloc_large_less_oob(struct kunit *test) in krealloc_large_less_oob() argument
441 krealloc_less_oob_helper(test, KMALLOC_MAX_CACHE_SIZE + 235, in krealloc_large_less_oob()
449 static void krealloc_uaf(struct kunit *test) in krealloc_uaf() argument
456 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr1); in krealloc_uaf()
459 KUNIT_EXPECT_KASAN_FAIL(test, ptr2 = krealloc(ptr1, size2, GFP_KERNEL)); in krealloc_uaf()
460 KUNIT_ASSERT_NULL(test, ptr2); in krealloc_uaf()
461 KUNIT_EXPECT_KASAN_FAIL(test, *(volatile char *)ptr1); in krealloc_uaf()
464 static void kmalloc_oob_16(struct kunit *test) in kmalloc_oob_16() argument
470 KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); in kmalloc_oob_16()
472 /* This test is specifically crafted for the generic mode. */ in kmalloc_oob_16()
473 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_GENERIC); in kmalloc_oob_16()
477 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr1); in kmalloc_oob_16()
480 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr2); in kmalloc_oob_16()
484 KUNIT_EXPECT_KASAN_FAIL(test, *ptr1 = *ptr2); in kmalloc_oob_16()
489 static void kmalloc_uaf_16(struct kunit *test) in kmalloc_uaf_16() argument
495 KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); in kmalloc_uaf_16()
498 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr1); in kmalloc_uaf_16()
501 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr2); in kmalloc_uaf_16()
504 KUNIT_EXPECT_KASAN_FAIL(test, *ptr1 = *ptr2); in kmalloc_uaf_16()
514 static void kmalloc_oob_memset_2(struct kunit *test) in kmalloc_oob_memset_2() argument
520 KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); in kmalloc_oob_memset_2()
523 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in kmalloc_oob_memset_2()
528 KUNIT_EXPECT_KASAN_FAIL(test, memset(ptr + size - 1, 0, memset_size)); in kmalloc_oob_memset_2()
532 static void kmalloc_oob_memset_4(struct kunit *test) in kmalloc_oob_memset_4() argument
538 KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); in kmalloc_oob_memset_4()
541 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in kmalloc_oob_memset_4()
546 KUNIT_EXPECT_KASAN_FAIL(test, memset(ptr + size - 3, 0, memset_size)); in kmalloc_oob_memset_4()
550 static void kmalloc_oob_memset_8(struct kunit *test) in kmalloc_oob_memset_8() argument
556 KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); in kmalloc_oob_memset_8()
559 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in kmalloc_oob_memset_8()
564 KUNIT_EXPECT_KASAN_FAIL(test, memset(ptr + size - 7, 0, memset_size)); in kmalloc_oob_memset_8()
568 static void kmalloc_oob_memset_16(struct kunit *test) in kmalloc_oob_memset_16() argument
574 KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); in kmalloc_oob_memset_16()
577 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in kmalloc_oob_memset_16()
582 KUNIT_EXPECT_KASAN_FAIL(test, memset(ptr + size - 15, 0, memset_size)); in kmalloc_oob_memset_16()
586 static void kmalloc_oob_in_memset(struct kunit *test) in kmalloc_oob_in_memset() argument
591 KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); in kmalloc_oob_in_memset()
594 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in kmalloc_oob_in_memset()
598 KUNIT_EXPECT_KASAN_FAIL(test, in kmalloc_oob_in_memset()
603 static void kmalloc_memmove_negative_size(struct kunit *test) in kmalloc_memmove_negative_size() argument
609 KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); in kmalloc_memmove_negative_size()
613 * As a result, this test introduces a side-effect memory corruption, in kmalloc_memmove_negative_size()
616 KASAN_TEST_NEEDS_CONFIG_OFF(test, CONFIG_KASAN_HW_TAGS); in kmalloc_memmove_negative_size()
619 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in kmalloc_memmove_negative_size()
624 KUNIT_EXPECT_KASAN_FAIL(test, in kmalloc_memmove_negative_size()
629 static void kmalloc_memmove_invalid_size(struct kunit *test) in kmalloc_memmove_invalid_size() argument
635 KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); in kmalloc_memmove_invalid_size()
638 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in kmalloc_memmove_invalid_size()
643 KUNIT_EXPECT_KASAN_FAIL(test, in kmalloc_memmove_invalid_size()
648 static void kmalloc_uaf(struct kunit *test) in kmalloc_uaf() argument
654 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in kmalloc_uaf()
657 KUNIT_EXPECT_KASAN_FAIL(test, ((volatile char *)ptr)[8]); in kmalloc_uaf()
660 static void kmalloc_uaf_memset(struct kunit *test) in kmalloc_uaf_memset() argument
665 KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); in kmalloc_uaf_memset()
669 * kernel memory corruption this test causes. in kmalloc_uaf_memset()
671 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_GENERIC); in kmalloc_uaf_memset()
674 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in kmalloc_uaf_memset()
677 KUNIT_EXPECT_KASAN_FAIL(test, memset(ptr, 0, size)); in kmalloc_uaf_memset()
680 static void kmalloc_uaf2(struct kunit *test) in kmalloc_uaf2() argument
688 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr1); in kmalloc_uaf2()
693 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr2); in kmalloc_uaf2()
704 KUNIT_EXPECT_KASAN_FAIL(test, ((volatile char *)ptr1)[40]); in kmalloc_uaf2()
705 KUNIT_EXPECT_PTR_NE(test, ptr1, ptr2); in kmalloc_uaf2()
714 static void kmalloc_uaf3(struct kunit *test) in kmalloc_uaf3() argument
719 /* This test is specifically crafted for tag-based modes. */ in kmalloc_uaf3()
720 KASAN_TEST_NEEDS_CONFIG_OFF(test, CONFIG_KASAN_GENERIC); in kmalloc_uaf3()
723 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr1); in kmalloc_uaf3()
727 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr2); in kmalloc_uaf3()
730 KUNIT_EXPECT_KASAN_FAIL(test, ((volatile char *)ptr1)[8]); in kmalloc_uaf3()
733 static void kasan_atomics_helper(struct kunit *test, void *unsafe, void *safe) in kasan_atomics_helper() argument
737 KUNIT_EXPECT_KASAN_FAIL(test, READ_ONCE(*i_unsafe)); in kasan_atomics_helper()
738 KUNIT_EXPECT_KASAN_FAIL(test, WRITE_ONCE(*i_unsafe, 42)); in kasan_atomics_helper()
739 KUNIT_EXPECT_KASAN_FAIL(test, smp_load_acquire(i_unsafe)); in kasan_atomics_helper()
740 KUNIT_EXPECT_KASAN_FAIL(test, smp_store_release(i_unsafe, 42)); in kasan_atomics_helper()
742 KUNIT_EXPECT_KASAN_FAIL(test, atomic_read(unsafe)); in kasan_atomics_helper()
743 KUNIT_EXPECT_KASAN_FAIL(test, atomic_set(unsafe, 42)); in kasan_atomics_helper()
744 KUNIT_EXPECT_KASAN_FAIL(test, atomic_add(42, unsafe)); in kasan_atomics_helper()
745 KUNIT_EXPECT_KASAN_FAIL(test, atomic_sub(42, unsafe)); in kasan_atomics_helper()
746 KUNIT_EXPECT_KASAN_FAIL(test, atomic_inc(unsafe)); in kasan_atomics_helper()
747 KUNIT_EXPECT_KASAN_FAIL(test, atomic_dec(unsafe)); in kasan_atomics_helper()
748 KUNIT_EXPECT_KASAN_FAIL(test, atomic_and(42, unsafe)); in kasan_atomics_helper()
749 KUNIT_EXPECT_KASAN_FAIL(test, atomic_andnot(42, unsafe)); in kasan_atomics_helper()
750 KUNIT_EXPECT_KASAN_FAIL(test, atomic_or(42, unsafe)); in kasan_atomics_helper()
751 KUNIT_EXPECT_KASAN_FAIL(test, atomic_xor(42, unsafe)); in kasan_atomics_helper()
752 KUNIT_EXPECT_KASAN_FAIL(test, atomic_xchg(unsafe, 42)); in kasan_atomics_helper()
753 KUNIT_EXPECT_KASAN_FAIL(test, atomic_cmpxchg(unsafe, 21, 42)); in kasan_atomics_helper()
754 KUNIT_EXPECT_KASAN_FAIL(test, atomic_try_cmpxchg(unsafe, safe, 42)); in kasan_atomics_helper()
755 KUNIT_EXPECT_KASAN_FAIL(test, atomic_try_cmpxchg(safe, unsafe, 42)); in kasan_atomics_helper()
756 KUNIT_EXPECT_KASAN_FAIL(test, atomic_sub_and_test(42, unsafe)); in kasan_atomics_helper()
757 KUNIT_EXPECT_KASAN_FAIL(test, atomic_dec_and_test(unsafe)); in kasan_atomics_helper()
758 KUNIT_EXPECT_KASAN_FAIL(test, atomic_inc_and_test(unsafe)); in kasan_atomics_helper()
759 KUNIT_EXPECT_KASAN_FAIL(test, atomic_add_negative(42, unsafe)); in kasan_atomics_helper()
760 KUNIT_EXPECT_KASAN_FAIL(test, atomic_add_unless(unsafe, 21, 42)); in kasan_atomics_helper()
761 KUNIT_EXPECT_KASAN_FAIL(test, atomic_inc_not_zero(unsafe)); in kasan_atomics_helper()
762 KUNIT_EXPECT_KASAN_FAIL(test, atomic_inc_unless_negative(unsafe)); in kasan_atomics_helper()
763 KUNIT_EXPECT_KASAN_FAIL(test, atomic_dec_unless_positive(unsafe)); in kasan_atomics_helper()
764 KUNIT_EXPECT_KASAN_FAIL(test, atomic_dec_if_positive(unsafe)); in kasan_atomics_helper()
766 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_read(unsafe)); in kasan_atomics_helper()
767 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_set(unsafe, 42)); in kasan_atomics_helper()
768 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_add(42, unsafe)); in kasan_atomics_helper()
769 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_sub(42, unsafe)); in kasan_atomics_helper()
770 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_inc(unsafe)); in kasan_atomics_helper()
771 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_dec(unsafe)); in kasan_atomics_helper()
772 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_and(42, unsafe)); in kasan_atomics_helper()
773 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_andnot(42, unsafe)); in kasan_atomics_helper()
774 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_or(42, unsafe)); in kasan_atomics_helper()
775 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_xor(42, unsafe)); in kasan_atomics_helper()
776 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_xchg(unsafe, 42)); in kasan_atomics_helper()
777 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_cmpxchg(unsafe, 21, 42)); in kasan_atomics_helper()
778 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_try_cmpxchg(unsafe, safe, 42)); in kasan_atomics_helper()
779 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_try_cmpxchg(safe, unsafe, 42)); in kasan_atomics_helper()
780 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_sub_and_test(42, unsafe)); in kasan_atomics_helper()
781 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_dec_and_test(unsafe)); in kasan_atomics_helper()
782 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_inc_and_test(unsafe)); in kasan_atomics_helper()
783 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_add_negative(42, unsafe)); in kasan_atomics_helper()
784 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_add_unless(unsafe, 21, 42)); in kasan_atomics_helper()
785 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_inc_not_zero(unsafe)); in kasan_atomics_helper()
786 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_inc_unless_negative(unsafe)); in kasan_atomics_helper()
787 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_dec_unless_positive(unsafe)); in kasan_atomics_helper()
788 KUNIT_EXPECT_KASAN_FAIL(test, atomic_long_dec_if_positive(unsafe)); in kasan_atomics_helper()
791 static void kasan_atomics(struct kunit *test) in kasan_atomics() argument
800 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, a1); in kasan_atomics()
802 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, a2); in kasan_atomics()
805 kasan_atomics_helper(test, a1 + 48, a2); in kasan_atomics()
811 static void kmalloc_double_kzfree(struct kunit *test) in kmalloc_double_kzfree() argument
817 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in kmalloc_double_kzfree()
820 KUNIT_EXPECT_KASAN_FAIL(test, kfree_sensitive(ptr)); in kmalloc_double_kzfree()
824 static void ksize_unpoisons_memory(struct kunit *test) in ksize_unpoisons_memory() argument
831 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in ksize_unpoisons_memory()
834 KUNIT_EXPECT_GT(test, real_size, size); in ksize_unpoisons_memory()
844 KUNIT_EXPECT_KASAN_FAIL(test, ((volatile char *)ptr)[size]); in ksize_unpoisons_memory()
845 KUNIT_EXPECT_KASAN_FAIL(test, ((volatile char *)ptr)[size + 5]); in ksize_unpoisons_memory()
846 KUNIT_EXPECT_KASAN_FAIL(test, ((volatile char *)ptr)[real_size - 1]); in ksize_unpoisons_memory()
855 static void ksize_uaf(struct kunit *test) in ksize_uaf() argument
861 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in ksize_uaf()
865 KUNIT_EXPECT_KASAN_FAIL(test, ksize(ptr)); in ksize_uaf()
866 KUNIT_EXPECT_KASAN_FAIL(test, ((volatile char *)ptr)[0]); in ksize_uaf()
867 KUNIT_EXPECT_KASAN_FAIL(test, ((volatile char *)ptr)[size]); in ksize_uaf()
892 static void rcu_uaf(struct kunit *test) in rcu_uaf() argument
897 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in rcu_uaf()
902 KUNIT_EXPECT_KASAN_FAIL(test, in rcu_uaf()
912 static void workqueue_uaf(struct kunit *test) in workqueue_uaf() argument
918 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, workqueue); in workqueue_uaf()
921 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, work); in workqueue_uaf()
927 KUNIT_EXPECT_KASAN_FAIL(test, in workqueue_uaf()
931 static void kfree_via_page(struct kunit *test) in kfree_via_page() argument
939 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in kfree_via_page()
946 static void kfree_via_phys(struct kunit *test) in kfree_via_phys() argument
953 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in kfree_via_phys()
959 static void kmem_cache_oob(struct kunit *test) in kmem_cache_oob() argument
966 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, cache); in kmem_cache_oob()
970 kunit_err(test, "Allocation failed: %s\n", __func__); in kmem_cache_oob()
975 KUNIT_EXPECT_KASAN_FAIL(test, *p = p[size + OOB_TAG_OFF]); in kmem_cache_oob()
981 static void kmem_cache_double_free(struct kunit *test) in kmem_cache_double_free() argument
988 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, cache); in kmem_cache_double_free()
992 kunit_err(test, "Allocation failed: %s\n", __func__); in kmem_cache_double_free()
998 KUNIT_EXPECT_KASAN_FAIL(test, kmem_cache_free(cache, p)); in kmem_cache_double_free()
1002 static void kmem_cache_invalid_free(struct kunit *test) in kmem_cache_invalid_free() argument
1010 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, cache); in kmem_cache_invalid_free()
1014 kunit_err(test, "Allocation failed: %s\n", __func__); in kmem_cache_invalid_free()
1020 KUNIT_EXPECT_KASAN_FAIL(test, kmem_cache_free(cache, p + 1)); in kmem_cache_invalid_free()
1031 static void kmem_cache_rcu_uaf(struct kunit *test) in kmem_cache_rcu_uaf() argument
1037 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_SLUB_RCU_DEBUG); in kmem_cache_rcu_uaf()
1041 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, cache); in kmem_cache_rcu_uaf()
1045 kunit_err(test, "Allocation failed: %s\n", __func__); in kmem_cache_rcu_uaf()
1071 KUNIT_EXPECT_KASAN_FAIL(test, READ_ONCE(*p)); in kmem_cache_rcu_uaf()
1076 static void kmem_cache_double_destroy(struct kunit *test) in kmem_cache_double_destroy() argument
1081 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, cache); in kmem_cache_double_destroy()
1083 KUNIT_EXPECT_KASAN_FAIL(test, kmem_cache_destroy(cache)); in kmem_cache_double_destroy()
1086 static void kmem_cache_accounted(struct kunit *test) in kmem_cache_accounted() argument
1094 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, cache); in kmem_cache_accounted()
1113 static void kmem_cache_bulk(struct kunit *test) in kmem_cache_bulk() argument
1122 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, cache); in kmem_cache_bulk()
1126 kunit_err(test, "Allocation failed: %s\n", __func__); in kmem_cache_bulk()
1138 static void *mempool_prepare_kmalloc(struct kunit *test, mempool_t *pool, size_t size) in mempool_prepare_kmalloc() argument
1146 KUNIT_ASSERT_EQ(test, ret, 0); in mempool_prepare_kmalloc()
1155 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, elem); in mempool_prepare_kmalloc()
1160 static struct kmem_cache *mempool_prepare_slab(struct kunit *test, mempool_t *pool, size_t size) in mempool_prepare_slab() argument
1167 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, cache); in mempool_prepare_slab()
1171 KUNIT_ASSERT_EQ(test, ret, 0); in mempool_prepare_slab()
1181 static void *mempool_prepare_page(struct kunit *test, mempool_t *pool, int order) in mempool_prepare_page() argument
1189 KUNIT_ASSERT_EQ(test, ret, 0); in mempool_prepare_page()
1192 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, elem); in mempool_prepare_page()
1197 static void mempool_oob_right_helper(struct kunit *test, mempool_t *pool, size_t size) in mempool_oob_right_helper() argument
1202 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, elem); in mempool_oob_right_helper()
1207 KUNIT_EXPECT_KASAN_FAIL(test, in mempool_oob_right_helper()
1210 KUNIT_EXPECT_KASAN_FAIL(test, in mempool_oob_right_helper()
1216 static void mempool_kmalloc_oob_right(struct kunit *test) in mempool_kmalloc_oob_right() argument
1222 extra_elem = mempool_prepare_kmalloc(test, &pool, size); in mempool_kmalloc_oob_right()
1224 mempool_oob_right_helper(test, &pool, size); in mempool_kmalloc_oob_right()
1230 static void mempool_kmalloc_large_oob_right(struct kunit *test) in mempool_kmalloc_large_oob_right() argument
1236 extra_elem = mempool_prepare_kmalloc(test, &pool, size); in mempool_kmalloc_large_oob_right()
1238 mempool_oob_right_helper(test, &pool, size); in mempool_kmalloc_large_oob_right()
1244 static void mempool_slab_oob_right(struct kunit *test) in mempool_slab_oob_right() argument
1250 cache = mempool_prepare_slab(test, &pool, size); in mempool_slab_oob_right()
1252 mempool_oob_right_helper(test, &pool, size); in mempool_slab_oob_right()
1259 * Skip the out-of-bounds test for page mempool. With Generic KASAN, page
1266 static void mempool_uaf_helper(struct kunit *test, mempool_t *pool, bool page) in mempool_uaf_helper() argument
1271 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, elem); in mempool_uaf_helper()
1276 KUNIT_EXPECT_KASAN_FAIL(test, ((volatile char *)ptr)[0]); in mempool_uaf_helper()
1279 static void mempool_kmalloc_uaf(struct kunit *test) in mempool_kmalloc_uaf() argument
1285 extra_elem = mempool_prepare_kmalloc(test, &pool, size); in mempool_kmalloc_uaf()
1287 mempool_uaf_helper(test, &pool, false); in mempool_kmalloc_uaf()
1293 static void mempool_kmalloc_large_uaf(struct kunit *test) in mempool_kmalloc_large_uaf() argument
1299 extra_elem = mempool_prepare_kmalloc(test, &pool, size); in mempool_kmalloc_large_uaf()
1301 mempool_uaf_helper(test, &pool, false); in mempool_kmalloc_large_uaf()
1307 static void mempool_slab_uaf(struct kunit *test) in mempool_slab_uaf() argument
1313 cache = mempool_prepare_slab(test, &pool, size); in mempool_slab_uaf()
1315 mempool_uaf_helper(test, &pool, false); in mempool_slab_uaf()
1321 static void mempool_page_alloc_uaf(struct kunit *test) in mempool_page_alloc_uaf() argument
1327 extra_elem = mempool_prepare_page(test, &pool, order); in mempool_page_alloc_uaf()
1329 mempool_uaf_helper(test, &pool, true); in mempool_page_alloc_uaf()
1335 static void mempool_double_free_helper(struct kunit *test, mempool_t *pool) in mempool_double_free_helper() argument
1340 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, elem); in mempool_double_free_helper()
1344 KUNIT_EXPECT_KASAN_FAIL(test, mempool_free(elem, pool)); in mempool_double_free_helper()
1347 static void mempool_kmalloc_double_free(struct kunit *test) in mempool_kmalloc_double_free() argument
1353 extra_elem = mempool_prepare_kmalloc(test, &pool, size); in mempool_kmalloc_double_free()
1355 mempool_double_free_helper(test, &pool); in mempool_kmalloc_double_free()
1361 static void mempool_kmalloc_large_double_free(struct kunit *test) in mempool_kmalloc_large_double_free() argument
1367 extra_elem = mempool_prepare_kmalloc(test, &pool, size); in mempool_kmalloc_large_double_free()
1369 mempool_double_free_helper(test, &pool); in mempool_kmalloc_large_double_free()
1375 static void mempool_page_alloc_double_free(struct kunit *test) in mempool_page_alloc_double_free() argument
1381 extra_elem = mempool_prepare_page(test, &pool, order); in mempool_page_alloc_double_free()
1383 mempool_double_free_helper(test, &pool); in mempool_page_alloc_double_free()
1389 static void mempool_kmalloc_invalid_free_helper(struct kunit *test, mempool_t *pool) in mempool_kmalloc_invalid_free_helper() argument
1394 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, elem); in mempool_kmalloc_invalid_free_helper()
1396 KUNIT_EXPECT_KASAN_FAIL(test, mempool_free(elem + 1, pool)); in mempool_kmalloc_invalid_free_helper()
1401 static void mempool_kmalloc_invalid_free(struct kunit *test) in mempool_kmalloc_invalid_free() argument
1407 extra_elem = mempool_prepare_kmalloc(test, &pool, size); in mempool_kmalloc_invalid_free()
1409 mempool_kmalloc_invalid_free_helper(test, &pool); in mempool_kmalloc_invalid_free()
1415 static void mempool_kmalloc_large_invalid_free(struct kunit *test) in mempool_kmalloc_large_invalid_free() argument
1421 extra_elem = mempool_prepare_kmalloc(test, &pool, size); in mempool_kmalloc_large_invalid_free()
1423 mempool_kmalloc_invalid_free_helper(test, &pool); in mempool_kmalloc_large_invalid_free()
1430 * Skip the invalid-free test for page mempool. The invalid-free detection only
1437 static void kasan_global_oob_right(struct kunit *test) in kasan_global_oob_right() argument
1455 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_GENERIC); in kasan_global_oob_right()
1457 KUNIT_EXPECT_KASAN_FAIL(test, *(volatile char *)p); in kasan_global_oob_right()
1460 static void kasan_global_oob_left(struct kunit *test) in kasan_global_oob_left() argument
1466 * GCC is known to fail this test, skip it. in kasan_global_oob_left()
1469 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_CC_IS_CLANG); in kasan_global_oob_left()
1470 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_GENERIC); in kasan_global_oob_left()
1471 KUNIT_EXPECT_KASAN_FAIL(test, *(volatile char *)p); in kasan_global_oob_left()
1474 static void kasan_stack_oob(struct kunit *test) in kasan_stack_oob() argument
1481 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_STACK); in kasan_stack_oob()
1483 KUNIT_EXPECT_KASAN_FAIL(test, *(volatile char *)p); in kasan_stack_oob()
1486 static void kasan_alloca_oob_left(struct kunit *test) in kasan_alloca_oob_left() argument
1495 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_GENERIC); in kasan_alloca_oob_left()
1496 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_STACK); in kasan_alloca_oob_left()
1498 KUNIT_EXPECT_KASAN_FAIL(test, *(volatile char *)p); in kasan_alloca_oob_left()
1501 static void kasan_alloca_oob_right(struct kunit *test) in kasan_alloca_oob_right() argument
1510 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_GENERIC); in kasan_alloca_oob_right()
1511 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_STACK); in kasan_alloca_oob_right()
1513 KUNIT_EXPECT_KASAN_FAIL(test, *(volatile char *)p); in kasan_alloca_oob_right()
1516 static void kasan_memchr(struct kunit *test) in kasan_memchr() argument
1525 KASAN_TEST_NEEDS_CONFIG_OFF(test, CONFIG_AMD_MEM_ENCRYPT); in kasan_memchr()
1531 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in kasan_memchr()
1535 KUNIT_EXPECT_KASAN_FAIL(test, in kasan_memchr()
1541 static void kasan_memcmp(struct kunit *test) in kasan_memcmp() argument
1551 KASAN_TEST_NEEDS_CONFIG_OFF(test, CONFIG_AMD_MEM_ENCRYPT); in kasan_memcmp()
1557 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in kasan_memcmp()
1562 KUNIT_EXPECT_KASAN_FAIL(test, in kasan_memcmp()
1567 static void kasan_strings(struct kunit *test) in kasan_strings() argument
1577 KASAN_TEST_NEEDS_CONFIG_OFF(test, CONFIG_AMD_MEM_ENCRYPT); in kasan_strings()
1580 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in kasan_strings()
1593 KUNIT_EXPECT_EQ(test, KASAN_GRANULE_SIZE - 2, in kasan_strings()
1597 KUNIT_EXPECT_KASAN_FAIL(test, strscpy(ptr, src + KASAN_GRANULE_SIZE, in kasan_strings()
1610 KUNIT_EXPECT_KASAN_FAIL(test, kasan_ptr_result = strchr(ptr, '1')); in kasan_strings()
1612 KUNIT_EXPECT_KASAN_FAIL(test, kasan_ptr_result = strrchr(ptr, '1')); in kasan_strings()
1614 KUNIT_EXPECT_KASAN_FAIL(test, kasan_int_result = strcmp(ptr, "2")); in kasan_strings()
1616 KUNIT_EXPECT_KASAN_FAIL(test, kasan_int_result = strncmp(ptr, "2", 1)); in kasan_strings()
1618 KUNIT_EXPECT_KASAN_FAIL(test, kasan_int_result = strlen(ptr)); in kasan_strings()
1620 KUNIT_EXPECT_KASAN_FAIL(test, kasan_int_result = strnlen(ptr, 1)); in kasan_strings()
1623 static void kasan_bitops_modify(struct kunit *test, int nr, void *addr) in kasan_bitops_modify() argument
1625 KUNIT_EXPECT_KASAN_FAIL(test, set_bit(nr, addr)); in kasan_bitops_modify()
1626 KUNIT_EXPECT_KASAN_FAIL(test, __set_bit(nr, addr)); in kasan_bitops_modify()
1627 KUNIT_EXPECT_KASAN_FAIL(test, clear_bit(nr, addr)); in kasan_bitops_modify()
1628 KUNIT_EXPECT_KASAN_FAIL(test, __clear_bit(nr, addr)); in kasan_bitops_modify()
1629 KUNIT_EXPECT_KASAN_FAIL(test, clear_bit_unlock(nr, addr)); in kasan_bitops_modify()
1630 KUNIT_EXPECT_KASAN_FAIL(test, __clear_bit_unlock(nr, addr)); in kasan_bitops_modify()
1631 KUNIT_EXPECT_KASAN_FAIL(test, change_bit(nr, addr)); in kasan_bitops_modify()
1632 KUNIT_EXPECT_KASAN_FAIL(test, __change_bit(nr, addr)); in kasan_bitops_modify()
1635 static void kasan_bitops_test_and_modify(struct kunit *test, int nr, void *addr) in kasan_bitops_test_and_modify() argument
1637 KUNIT_EXPECT_KASAN_FAIL(test, test_and_set_bit(nr, addr)); in kasan_bitops_test_and_modify()
1638 KUNIT_EXPECT_KASAN_FAIL(test, __test_and_set_bit(nr, addr)); in kasan_bitops_test_and_modify()
1639 KUNIT_EXPECT_KASAN_FAIL(test, test_and_set_bit_lock(nr, addr)); in kasan_bitops_test_and_modify()
1640 KUNIT_EXPECT_KASAN_FAIL(test, test_and_clear_bit(nr, addr)); in kasan_bitops_test_and_modify()
1641 KUNIT_EXPECT_KASAN_FAIL(test, __test_and_clear_bit(nr, addr)); in kasan_bitops_test_and_modify()
1642 KUNIT_EXPECT_KASAN_FAIL(test, test_and_change_bit(nr, addr)); in kasan_bitops_test_and_modify()
1643 KUNIT_EXPECT_KASAN_FAIL(test, __test_and_change_bit(nr, addr)); in kasan_bitops_test_and_modify()
1644 KUNIT_EXPECT_KASAN_FAIL(test, kasan_int_result = test_bit(nr, addr)); in kasan_bitops_test_and_modify()
1646 KUNIT_EXPECT_KASAN_FAIL(test, kasan_int_result = in kasan_bitops_test_and_modify()
1650 static void kasan_bitops_generic(struct kunit *test) in kasan_bitops_generic() argument
1654 /* This test is specifically crafted for the generic mode. */ in kasan_bitops_generic()
1655 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_GENERIC); in kasan_bitops_generic()
1662 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, bits); in kasan_bitops_generic()
1669 kasan_bitops_modify(test, BITS_PER_LONG, bits); in kasan_bitops_generic()
1674 kasan_bitops_test_and_modify(test, BITS_PER_LONG + BITS_PER_BYTE, bits); in kasan_bitops_generic()
1679 static void kasan_bitops_tags(struct kunit *test) in kasan_bitops_tags() argument
1683 /* This test is specifically crafted for tag-based modes. */ in kasan_bitops_tags()
1684 KASAN_TEST_NEEDS_CONFIG_OFF(test, CONFIG_KASAN_GENERIC); in kasan_bitops_tags()
1688 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, bits); in kasan_bitops_tags()
1691 kasan_bitops_modify(test, BITS_PER_LONG, (void *)bits + 48); in kasan_bitops_tags()
1692 kasan_bitops_test_and_modify(test, BITS_PER_LONG + BITS_PER_BYTE, (void *)bits + 48); in kasan_bitops_tags()
1697 static void vmalloc_helpers_tags(struct kunit *test) in vmalloc_helpers_tags() argument
1701 /* This test is intended for tag-based modes. */ in vmalloc_helpers_tags()
1702 KASAN_TEST_NEEDS_CONFIG_OFF(test, CONFIG_KASAN_GENERIC); in vmalloc_helpers_tags()
1704 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_VMALLOC); in vmalloc_helpers_tags()
1707 kunit_skip(test, "Test requires kasan.vmalloc=on"); in vmalloc_helpers_tags()
1710 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in vmalloc_helpers_tags()
1713 KUNIT_EXPECT_GE(test, (u8)get_tag(ptr), (u8)KASAN_TAG_MIN); in vmalloc_helpers_tags()
1714 KUNIT_EXPECT_LT(test, (u8)get_tag(ptr), (u8)KASAN_TAG_KERNEL); in vmalloc_helpers_tags()
1717 KUNIT_ASSERT_TRUE(test, is_vmalloc_addr(ptr)); in vmalloc_helpers_tags()
1718 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, vmalloc_to_page(ptr)); in vmalloc_helpers_tags()
1726 KUNIT_ASSERT_GE(test, rv, 0); in vmalloc_helpers_tags()
1728 KUNIT_ASSERT_GE(test, rv, 0); in vmalloc_helpers_tags()
1735 static void vmalloc_oob(struct kunit *test) in vmalloc_oob() argument
1741 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_VMALLOC); in vmalloc_oob()
1744 kunit_skip(test, "Test requires kasan.vmalloc=on"); in vmalloc_oob()
1747 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, v_ptr); in vmalloc_oob()
1765 KUNIT_EXPECT_KASAN_FAIL(test, ((volatile char *)v_ptr)[size]); in vmalloc_oob()
1768 KUNIT_EXPECT_KASAN_FAIL(test, ((volatile char *)v_ptr)[size + 5]); in vmalloc_oob()
1772 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, page); in vmalloc_oob()
1774 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, p_ptr); in vmalloc_oob()
1786 static void vmap_tags(struct kunit *test) in vmap_tags() argument
1792 * This test is specifically crafted for the software tag-based mode, in vmap_tags()
1795 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_SW_TAGS); in vmap_tags()
1797 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_VMALLOC); in vmap_tags()
1800 kunit_skip(test, "Test requires kasan.vmalloc=on"); in vmap_tags()
1803 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, p_page); in vmap_tags()
1805 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, p_ptr); in vmap_tags()
1808 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, v_ptr); in vmap_tags()
1816 KUNIT_EXPECT_GE(test, (u8)get_tag(v_ptr), (u8)KASAN_TAG_MIN); in vmap_tags()
1817 KUNIT_EXPECT_LT(test, (u8)get_tag(v_ptr), (u8)KASAN_TAG_KERNEL); in vmap_tags()
1825 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, v_page); in vmap_tags()
1826 KUNIT_EXPECT_PTR_EQ(test, p_page, v_page); in vmap_tags()
1832 static void vm_map_ram_tags(struct kunit *test) in vm_map_ram_tags() argument
1838 * This test is specifically crafted for the software tag-based mode, in vm_map_ram_tags()
1841 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_SW_TAGS); in vm_map_ram_tags()
1844 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, page); in vm_map_ram_tags()
1846 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, p_ptr); in vm_map_ram_tags()
1849 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, v_ptr); in vm_map_ram_tags()
1851 KUNIT_EXPECT_GE(test, (u8)get_tag(v_ptr), (u8)KASAN_TAG_MIN); in vm_map_ram_tags()
1852 KUNIT_EXPECT_LT(test, (u8)get_tag(v_ptr), (u8)KASAN_TAG_KERNEL); in vm_map_ram_tags()
1867 static void match_all_not_assigned(struct kunit *test) in match_all_not_assigned() argument
1873 KASAN_TEST_NEEDS_CONFIG_OFF(test, CONFIG_KASAN_GENERIC); in match_all_not_assigned()
1878 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in match_all_not_assigned()
1879 KUNIT_EXPECT_GE(test, (u8)get_tag(ptr), (u8)KASAN_TAG_MIN); in match_all_not_assigned()
1880 KUNIT_EXPECT_LT(test, (u8)get_tag(ptr), (u8)KASAN_TAG_KERNEL); in match_all_not_assigned()
1888 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in match_all_not_assigned()
1889 KUNIT_EXPECT_GE(test, (u8)get_tag(ptr), (u8)KASAN_TAG_MIN); in match_all_not_assigned()
1890 KUNIT_EXPECT_LT(test, (u8)get_tag(ptr), (u8)KASAN_TAG_KERNEL); in match_all_not_assigned()
1900 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in match_all_not_assigned()
1901 KUNIT_EXPECT_GE(test, (u8)get_tag(ptr), (u8)KASAN_TAG_MIN); in match_all_not_assigned()
1902 KUNIT_EXPECT_LT(test, (u8)get_tag(ptr), (u8)KASAN_TAG_KERNEL); in match_all_not_assigned()
1908 static void match_all_ptr_tag(struct kunit *test) in match_all_ptr_tag() argument
1913 KASAN_TEST_NEEDS_CONFIG_OFF(test, CONFIG_KASAN_GENERIC); in match_all_ptr_tag()
1916 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in match_all_ptr_tag()
1920 KUNIT_EXPECT_NE(test, tag, (u8)KASAN_TAG_KERNEL); in match_all_ptr_tag()
1934 static void match_all_mem_tag(struct kunit *test) in match_all_mem_tag() argument
1939 KASAN_TEST_NEEDS_CONFIG_OFF(test, CONFIG_KASAN_GENERIC); in match_all_mem_tag()
1942 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in match_all_mem_tag()
1943 KUNIT_EXPECT_NE(test, (u8)get_tag(ptr), (u8)KASAN_TAG_KERNEL); in match_all_mem_tag()
1949 * values to avoid the test printing too many reports. in match_all_mem_tag()
1962 KUNIT_EXPECT_KASAN_FAIL(test, *ptr = 0); in match_all_mem_tag()
1972 * This is a smoke test to make sure that Rust is being sanitized properly.
1974 static void rust_uaf(struct kunit *test) in rust_uaf() argument
1976 KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_RUST); in rust_uaf()
1977 KUNIT_EXPECT_KASAN_FAIL(test, kasan_test_rust_uaf()); in rust_uaf()
1980 static void copy_to_kernel_nofault_oob(struct kunit *test) in copy_to_kernel_nofault_oob() argument
1987 * This test currently fails with the HW_TAGS mode. The reason is in copy_to_kernel_nofault_oob()
1990 KASAN_TEST_NEEDS_CONFIG_OFF(test, CONFIG_KASAN_HW_TAGS); in copy_to_kernel_nofault_oob()
1993 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); in copy_to_kernel_nofault_oob()
1997 * We test copy_to_kernel_nofault() to detect corrupted memory that is in copy_to_kernel_nofault_oob()
2007 KUNIT_EXPECT_KASAN_FAIL(test, in copy_to_kernel_nofault_oob()
2009 KUNIT_EXPECT_KASAN_FAIL(test, in copy_to_kernel_nofault_oob()
2015 static void copy_user_test_oob(struct kunit *test) in copy_user_test_oob() argument
2023 kmem = kunit_kmalloc(test, size, GFP_KERNEL); in copy_user_test_oob()
2024 KUNIT_ASSERT_NOT_ERR_OR_NULL(test, kmem); in copy_user_test_oob()
2026 useraddr = kunit_vm_mmap(test, NULL, 0, PAGE_SIZE, in copy_user_test_oob()
2029 KUNIT_ASSERT_NE_MSG(test, useraddr, 0, in copy_user_test_oob()
2031 KUNIT_ASSERT_LT_MSG(test, useraddr, (unsigned long)TASK_SIZE, in copy_user_test_oob()
2037 KUNIT_EXPECT_KASAN_FAIL(test, in copy_user_test_oob()
2039 KUNIT_EXPECT_KASAN_FAIL(test, in copy_user_test_oob()
2041 KUNIT_EXPECT_KASAN_FAIL(test, in copy_user_test_oob()
2043 KUNIT_EXPECT_KASAN_FAIL(test, in copy_user_test_oob()
2045 KUNIT_EXPECT_KASAN_FAIL(test, in copy_user_test_oob()
2047 KUNIT_EXPECT_KASAN_FAIL(test, in copy_user_test_oob()
2051 * Prepare a long string in usermem to avoid the strncpy_from_user test in copy_user_test_oob()
2055 KUNIT_EXPECT_EQ(test, copy_to_user(usermem, kmem, size), 0); in copy_user_test_oob()
2057 KUNIT_EXPECT_KASAN_FAIL(test, in copy_user_test_oob()