Lines Matching defs:test

3  * Runtime test cases for CONFIG_FORTIFY_SOURCE. For additional memcpy()
44 #include <kunit/test.h>
45 #include <kunit/test-bug.h>
84 static void fortify_test_known_sizes(struct kunit *test)
86 KUNIT_EXPECT_EQ(test, __compiletime_strlen("88888888"), 8);
87 KUNIT_EXPECT_EQ(test, __compiletime_strlen(array_of_10), 10);
88 KUNIT_EXPECT_EQ(test, __compiletime_strlen(ptr_of_11), 11);
90 KUNIT_EXPECT_EQ(test, __compiletime_strlen(array_unknown), SIZE_MAX);
92 KUNIT_EXPECT_EQ(test, __compiletime_strlen(test->name), SIZE_MAX);
117 static void fortify_test_control_flow_split(struct kunit *test)
119 KUNIT_EXPECT_EQ(test, want_minus_one(pick), SIZE_MAX);
122 #define KUNIT_EXPECT_BOS(test, p, expected, name) \
123 KUNIT_EXPECT_EQ_MSG(test, __builtin_object_size(p, 1), \
128 #define KUNIT_EXPECT_BDOS(test, p, expected, name) \
130 KUNIT_EXPECT_EQ(test, expected, expected)
132 #define KUNIT_EXPECT_BDOS(test, p, expected, name) \
133 KUNIT_EXPECT_EQ_MSG(test, __builtin_dynamic_object_size(p, 1), \
142 KUNIT_EXPECT_TRUE_MSG(test, p != NULL, #alloc " failed?!\n"); \
143 KUNIT_EXPECT_BOS(test, p, expected, #alloc); \
144 KUNIT_EXPECT_BDOS(test, p, expected, #alloc); \
152 KUNIT_EXPECT_TRUE_MSG(test, p != NULL, #alloc " failed?!\n"); \
153 KUNIT_EXPECT_BOS(test, p, SIZE_MAX, #alloc); \
154 KUNIT_EXPECT_BDOS(test, p, expected, #alloc); \
176 kunit_skip(test, "Compiler is missing __builtin_dynamic_object_size() support\n")
182 * Expected size is "size" in each test, before it is then \
183 * internally incremented in each test. Requires we disable \
188 KUNIT_EXPECT_NE(test, size, unknown_size); \
193 static void fortify_test_alloc_size_##allocator##_const(struct kunit *test) \
197 static void fortify_test_alloc_size_##allocator##_dynamic(struct kunit *test) \
241 KUNIT_EXPECT_TRUE(test, orig != NULL); \
246 KUNIT_EXPECT_TRUE(test, orig != NULL); \
251 KUNIT_EXPECT_TRUE(test, orig != NULL); \
309 KUNIT_EXPECT_TRUE(test, orig != NULL); \
319 const char dev_name[] = "fortify-test"; \
325 dev = kunit_device_register(test, dev_name); \
326 KUNIT_ASSERT_FALSE_MSG(test, IS_ERR(dev), \
327 "Cannot register test device\n"); \
347 KUNIT_EXPECT_TRUE(test, orig != NULL); \
359 kunit_device_unregister(test, dev); \
376 KUNIT_EXPECT_EQ(test, __builtin_constant_p(len), 0); \
383 static void fortify_test_realloc_size(struct kunit *test)
403 static void fortify_test_strlen(struct kunit *test)
412 KUNIT_EXPECT_EQ(test, pad.buf[end], '\0');
413 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
416 KUNIT_EXPECT_EQ(test, strlen(pad.buf), end);
417 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
422 KUNIT_EXPECT_EQ(test, strlen(pad.buf), end);
423 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1);
426 static void fortify_test_strnlen(struct kunit *test)
435 KUNIT_EXPECT_EQ(test, pad.buf[end], '\0');
436 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
439 KUNIT_EXPECT_EQ(test, strnlen(pad.buf, sizeof(pad.buf)), end);
440 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
442 KUNIT_EXPECT_EQ(test, strnlen(pad.buf, sizeof(pad.buf) / 2),
444 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
450 KUNIT_EXPECT_EQ(test, strnlen(pad.buf, end + 1), end);
451 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1);
452 KUNIT_EXPECT_EQ(test, strnlen(pad.buf, end + 2), end);
453 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2);
456 KUNIT_EXPECT_EQ(test, strnlen(pad.buf, end), end);
457 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2);
460 KUNIT_EXPECT_EQ(test, strnlen(pad.buf, end), end);
461 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2);
464 static void fortify_test_strcpy(struct kunit *test)
475 KUNIT_EXPECT_EQ(test, pad.bytes_before, 0);
476 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
477 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 2], '\0');
478 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 3], '\0');
479 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
482 KUNIT_ASSERT_TRUE(test, strcpy(pad.buf, src)
484 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
485 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
487 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
488 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
489 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
493 KUNIT_ASSERT_TRUE(test, strcpy(pad.buf, src)
495 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
496 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 1);
498 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
499 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
500 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
502 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
506 KUNIT_ASSERT_TRUE(test, strcpy(pad.buf, src)
512 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1);
513 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 2);
515 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
516 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
517 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
519 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
522 static void fortify_test_strncpy(struct kunit *test)
528 KUNIT_EXPECT_EQ(test, pad.bytes_before, 0);
529 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
530 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 2], '\0');
531 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 3], '\0');
532 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
535 KUNIT_ASSERT_TRUE(test, strncpy(pad.buf, src,
538 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
540 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
541 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
542 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
545 KUNIT_ASSERT_TRUE(test, strncpy(pad.buf, src,
548 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
550 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 1], '\0');
551 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
552 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
554 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
557 KUNIT_ASSERT_TRUE(test, strncpy(pad.buf, src,
561 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 1);
562 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 1], '\0');
563 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
564 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
566 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
569 KUNIT_ASSERT_TRUE(test, strncpy(pad.buf, src,
573 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 2);
574 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 1], '\0');
575 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
576 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
578 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
581 static void fortify_test_strscpy(struct kunit *test)
587 KUNIT_EXPECT_EQ(test, pad.bytes_before, 0);
588 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
589 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 2], '\0');
590 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 3], '\0');
591 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
594 KUNIT_ASSERT_EQ(test, strscpy(pad.buf, src,
597 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
599 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
600 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 2], '\0');
601 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
604 KUNIT_ASSERT_EQ(test, strscpy(pad.buf, src,
607 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
609 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
610 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
611 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
614 KUNIT_ASSERT_EQ(test, strscpy(pad.buf, src,
618 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 1);
619 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
620 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
621 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
623 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
626 KUNIT_ASSERT_EQ(test, strscpy(pad.buf, src,
630 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 2);
631 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
632 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
633 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
635 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
638 static void fortify_test_strcat(struct kunit *test)
651 KUNIT_EXPECT_EQ(test, pad.bytes_before, 0);
652 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
653 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 2], '\0');
654 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 3], '\0');
655 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
658 KUNIT_ASSERT_TRUE(test, strcat(pad.buf, src) == pad.buf);
659 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
661 KUNIT_ASSERT_TRUE(test, strcat(pad.buf, src) == pad.buf);
662 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
664 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
665 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 2], '\0');
666 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
669 KUNIT_ASSERT_TRUE(test, strcat(pad.buf, one) == pad.buf);
670 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
672 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
673 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
674 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
677 KUNIT_ASSERT_TRUE(test, strcat(pad.buf, one) == pad.buf);
678 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 1);
680 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
681 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
682 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
683 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
686 KUNIT_ASSERT_TRUE(test, strcat(pad.buf, two) == pad.buf);
687 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 2);
689 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
690 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
691 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
692 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
695 static void fortify_test_strncat(struct kunit *test)
707 KUNIT_EXPECT_EQ(test, pad.bytes_before, 0);
708 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
709 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 2], '\0');
710 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 3], '\0');
711 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
714 KUNIT_ASSERT_TRUE(test, strncat(pad.buf, src, partial) == pad.buf);
715 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
716 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
718 KUNIT_ASSERT_TRUE(test, strncat(pad.buf, src, partial) == pad.buf);
719 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
720 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
722 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
723 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 2], '\0');
724 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
727 KUNIT_ASSERT_TRUE(test, strncat(pad.buf, src, 1) == pad.buf);
728 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
729 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
731 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
732 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
733 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
736 KUNIT_ASSERT_TRUE(test, strncat(pad.buf, src, 1) == pad.buf);
737 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
738 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 1);
740 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
741 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
742 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
743 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
746 KUNIT_ASSERT_TRUE(test, strncat(pad.buf, src, 2) == pad.buf);
747 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
748 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 2);
750 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
751 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
752 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
753 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
757 KUNIT_ASSERT_TRUE(test, strncat(pad.buf, src, 1) == pad.buf);
759 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1);
760 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 3);
761 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 1], '\0');
762 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
763 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
765 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
768 static void fortify_test_strlcat(struct kunit *test)
781 KUNIT_EXPECT_EQ(test, pad.bytes_before, 0);
782 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
783 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 2], '\0');
784 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 3], '\0');
785 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
788 KUNIT_ASSERT_EQ(test, strlcat(pad.buf, src, len), partial);
789 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
790 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
792 KUNIT_ASSERT_EQ(test, strlcat(pad.buf, src, len), partial * 2);
793 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
794 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
796 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
797 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 2], '\0');
798 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
801 KUNIT_ASSERT_EQ(test, strlcat(pad.buf, "Q", len), partial * 2 + 1);
802 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
803 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
805 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
806 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
807 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
810 KUNIT_ASSERT_EQ(test, strlcat(pad.buf, "V", len * 2), len);
811 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
812 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 1);
814 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
815 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
816 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
817 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
820 KUNIT_ASSERT_EQ(test, strlcat(pad.buf, "QQ", len * 2), len + 1);
821 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
822 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 2);
824 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
825 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
826 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
827 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
831 KUNIT_ASSERT_EQ(test, strlcat(pad.buf, "TT", len * 2), len + 2);
833 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2);
834 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 2);
835 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 1], '\0');
836 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
837 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
839 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
844 KUNIT_ASSERT_EQ(test, strlcat(pad.buf, src, len * 3), len - 1 + sizeof(src));
846 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 3);
847 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 3);
848 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
850 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
861 static void fortify_test_##memfunc(struct kunit *test) \
870 KUNIT_ASSERT_EQ(test, srcA[0], 'A'); \
872 KUNIT_ASSERT_EQ(test, srcB[0], 'B'); \
875 KUNIT_EXPECT_EQ(test, pad.buf[0], '\0'); \
876 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); \
877 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); \
879 KUNIT_EXPECT_EQ(test, pad.buf[0], '\0'); \
880 KUNIT_EXPECT_EQ(test, pad.buf[1], 'B'); \
881 KUNIT_EXPECT_EQ(test, pad.buf[2], '\0'); \
882 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); \
883 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); \
885 KUNIT_EXPECT_EQ(test, pad.buf[0], 'A'); \
886 KUNIT_EXPECT_EQ(test, pad.buf[1], 'B'); \
887 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); \
888 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); \
890 KUNIT_EXPECT_EQ(test, pad.buf[1], 'A'); \
891 KUNIT_EXPECT_EQ(test, pad.buf[len - 1], '\0'); \
892 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); \
893 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); \
895 KUNIT_EXPECT_EQ(test, pad.buf[1], 'A'); \
896 KUNIT_EXPECT_EQ(test, pad.buf[len - 1], 'A'); \
897 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0); \
898 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); \
899 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); \
901 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); \
902 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 1); \
904 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); \
905 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 2); \
911 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); \
912 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); \
915 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); \
916 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); \
921 static void fortify_test_memscan(struct kunit *test)
928 KUNIT_ASSERT_PTR_EQ(test, memscan(haystack, needle, len),
930 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
932 KUNIT_ASSERT_PTR_EQ(test, memscan(haystack, needle, len + 1),
934 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1);
935 KUNIT_ASSERT_PTR_EQ(test, memscan(haystack, needle, len * 2),
937 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2);
940 static void fortify_test_memchr(struct kunit *test)
947 KUNIT_ASSERT_PTR_EQ(test, memchr(haystack, needle, len),
949 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
951 KUNIT_ASSERT_PTR_EQ(test, memchr(haystack, needle, len + 1),
953 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1);
954 KUNIT_ASSERT_PTR_EQ(test, memchr(haystack, needle, len * 2),
956 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2);
959 static void fortify_test_memchr_inv(struct kunit *test)
967 KUNIT_ASSERT_PTR_EQ(test, memchr_inv(haystack, needle, len),
969 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
971 KUNIT_ASSERT_PTR_EQ(test, memchr_inv(haystack, needle, len + 1),
973 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1);
974 KUNIT_ASSERT_PTR_EQ(test, memchr_inv(haystack, needle, len * 2),
976 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2);
979 static void fortify_test_memcmp(struct kunit *test)
987 KUNIT_ASSERT_EQ(test, memcmp(one, two, one_len), 0);
988 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
990 KUNIT_ASSERT_LT(test, memcmp(one, two, one_len + 1), 0);
991 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
994 KUNIT_ASSERT_EQ(test, memcmp(one, two, one_len + 2), INT_MIN);
995 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1);
997 KUNIT_ASSERT_EQ(test, memcmp(two, one, two_len + 2), INT_MIN);
998 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2);
1001 static void fortify_test_kmemdup(struct kunit *test)
1009 KUNIT_EXPECT_NOT_NULL(test, copy);
1010 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
1015 KUNIT_EXPECT_NOT_NULL(test, copy);
1016 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
1021 KUNIT_EXPECT_NOT_NULL(test, copy);
1022 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
1027 KUNIT_EXPECT_PTR_EQ(test, copy, ZERO_SIZE_PTR);
1028 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1);
1033 KUNIT_EXPECT_PTR_EQ(test, copy, ZERO_SIZE_PTR);
1034 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2);
1039 KUNIT_EXPECT_PTR_EQ(test, copy, ZERO_SIZE_PTR);
1040 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 3);
1044 static int fortify_test_init(struct kunit *test)
1047 kunit_skip(test, "Not built with CONFIG_FORTIFY_SOURCE=y");
1050 kunit_add_named_resource(test, NULL, NULL, &read_resource,
1054 kunit_add_named_resource(test, NULL, NULL, &write_resource,