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>
85 static void fortify_test_known_sizes(struct kunit *test)
89 KUNIT_EXPECT_FALSE(test, __is_constexpr(__builtin_strlen(stack)));
90 KUNIT_EXPECT_EQ(test, __compiletime_strlen(stack), 5);
92 KUNIT_EXPECT_TRUE(test, __is_constexpr(__builtin_strlen("88888888")));
93 KUNIT_EXPECT_EQ(test, __compiletime_strlen("88888888"), 8);
95 KUNIT_EXPECT_TRUE(test, __is_constexpr(__builtin_strlen(array_of_10)));
96 KUNIT_EXPECT_EQ(test, __compiletime_strlen(array_of_10), 10);
98 KUNIT_EXPECT_FALSE(test, __is_constexpr(__builtin_strlen(ptr_of_11)));
99 KUNIT_EXPECT_EQ(test, __compiletime_strlen(ptr_of_11), 11);
101 KUNIT_EXPECT_TRUE(test, __is_constexpr(__builtin_strlen(unchanging_12)));
102 KUNIT_EXPECT_EQ(test, __compiletime_strlen(unchanging_12), 12);
104 KUNIT_EXPECT_FALSE(test, __is_constexpr(__builtin_strlen(array_unknown)));
105 KUNIT_EXPECT_EQ(test, __compiletime_strlen(array_unknown), SIZE_MAX);
108 KUNIT_EXPECT_FALSE(test, __is_constexpr(__builtin_strlen(test->name)));
109 KUNIT_EXPECT_EQ(test, __compiletime_strlen(test->name), SIZE_MAX);
134 static void fortify_test_control_flow_split(struct kunit *test)
136 KUNIT_EXPECT_EQ(test, want_minus_one(pick), SIZE_MAX);
139 #define KUNIT_EXPECT_BOS(test, p, expected, name) \
140 KUNIT_EXPECT_EQ_MSG(test, __builtin_object_size(p, 1), \
145 #define KUNIT_EXPECT_BDOS(test, p, expected, name) \
147 KUNIT_EXPECT_EQ(test, expected, expected)
149 #define KUNIT_EXPECT_BDOS(test, p, expected, name) \
150 KUNIT_EXPECT_EQ_MSG(test, __builtin_dynamic_object_size(p, 1), \
159 KUNIT_EXPECT_TRUE_MSG(test, p != NULL, #alloc " failed?!\n"); \
160 KUNIT_EXPECT_BOS(test, p, expected, #alloc); \
161 KUNIT_EXPECT_BDOS(test, p, expected, #alloc); \
169 KUNIT_EXPECT_TRUE_MSG(test, p != NULL, #alloc " failed?!\n"); \
170 KUNIT_EXPECT_BOS(test, p, SIZE_MAX, #alloc); \
171 KUNIT_EXPECT_BDOS(test, p, expected, #alloc); \
193 kunit_skip(test, "Compiler is missing __builtin_dynamic_object_size() support\n")
199 * Expected size is "size" in each test, before it is then \
200 * internally incremented in each test. Requires we disable \
205 KUNIT_EXPECT_NE(test, size, unknown_size); \
210 static void fortify_test_alloc_size_##allocator##_const(struct kunit *test) \
214 static void fortify_test_alloc_size_##allocator##_dynamic(struct kunit *test) \
256 KUNIT_EXPECT_TRUE(test, orig != NULL); \
261 KUNIT_EXPECT_TRUE(test, orig != NULL); \
266 KUNIT_EXPECT_TRUE(test, orig != NULL); \
324 KUNIT_EXPECT_TRUE(test, orig != NULL); \
333 const char dev_name[] = "fortify-test"; \
339 dev = kunit_device_register(test, dev_name); \
340 KUNIT_ASSERT_FALSE_MSG(test, IS_ERR(dev), \
341 "Cannot register test device\n"); \
361 KUNIT_EXPECT_TRUE(test, orig != NULL); \
373 kunit_device_unregister(test, dev); \
390 KUNIT_EXPECT_EQ(test, __builtin_constant_p(len), 0); \
397 static void fortify_test_realloc_size(struct kunit *test)
415 static void fortify_test_strlen(struct kunit *test)
424 KUNIT_EXPECT_EQ(test, pad.buf[end], '\0');
425 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
428 KUNIT_EXPECT_EQ(test, strlen(pad.buf), end);
429 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
434 KUNIT_EXPECT_EQ(test, strlen(pad.buf), end);
435 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1);
438 static void fortify_test_strnlen(struct kunit *test)
447 KUNIT_EXPECT_EQ(test, pad.buf[end], '\0');
448 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
451 KUNIT_EXPECT_EQ(test, strnlen(pad.buf, sizeof(pad.buf)), end);
452 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
454 KUNIT_EXPECT_EQ(test, strnlen(pad.buf, sizeof(pad.buf) / 2),
456 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
462 KUNIT_EXPECT_EQ(test, strnlen(pad.buf, end + 1), end);
463 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1);
464 KUNIT_EXPECT_EQ(test, strnlen(pad.buf, end + 2), end);
465 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2);
468 KUNIT_EXPECT_EQ(test, strnlen(pad.buf, end), end);
469 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2);
472 KUNIT_EXPECT_EQ(test, strnlen(pad.buf, end), end);
473 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2);
476 static void fortify_test_strcpy(struct kunit *test)
487 KUNIT_EXPECT_EQ(test, pad.bytes_before, 0);
488 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
489 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 2], '\0');
490 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 3], '\0');
491 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
494 KUNIT_ASSERT_TRUE(test, strcpy(pad.buf, src)
496 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
497 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
499 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
500 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
501 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
505 KUNIT_ASSERT_TRUE(test, strcpy(pad.buf, src)
507 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
508 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 1);
510 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
511 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
512 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
514 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
518 KUNIT_ASSERT_TRUE(test, strcpy(pad.buf, src)
524 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1);
525 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 2);
527 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
528 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
529 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
531 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
534 static void fortify_test_strncpy(struct kunit *test)
543 KUNIT_EXPECT_EQ(test, pad.bytes_before, 0);
544 KUNIT_EXPECT_EQ(test, pad.buf[sizeof_buf - 1], '\0');
545 KUNIT_EXPECT_EQ(test, pad.buf[sizeof_buf - 2], '\0');
546 KUNIT_EXPECT_EQ(test, pad.buf[sizeof_buf - 3], '\0');
547 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
550 KUNIT_ASSERT_TRUE(test, strncpy(pad.buf, src, sizeof_buf - 1)
552 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
554 KUNIT_EXPECT_EQ(test, pad.buf[sizeof_buf - 1], '\0');
555 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 2], '\0');
556 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 3], '\0');
559 KUNIT_ASSERT_TRUE(test, strncpy(pad.buf, src, sizeof_buf)
561 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
563 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 1], '\0');
564 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 2], '\0');
565 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 2], '\0');
567 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
570 KUNIT_ASSERT_TRUE(test, strncpy(pad.buf, src, sizeof_buf + 1)
573 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 1);
574 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 1], '\0');
575 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 2], '\0');
576 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 2], '\0');
578 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
581 KUNIT_ASSERT_TRUE(test, strncpy(pad.buf, src, sizeof_buf + 2)
584 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 2);
585 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 1], '\0');
586 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 2], '\0');
587 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 2], '\0');
589 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
592 static void fortify_test_strscpy(struct kunit *test)
603 KUNIT_EXPECT_EQ(test, pad.bytes_before, 0);
604 KUNIT_EXPECT_EQ(test, pad.buf[sizeof_buf - 1], '\0');
605 KUNIT_EXPECT_EQ(test, pad.buf[sizeof_buf - 2], '\0');
606 KUNIT_EXPECT_EQ(test, pad.buf[sizeof_buf - 3], '\0');
607 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
610 KUNIT_ASSERT_EQ(test, strscpy(pad.buf, src, sizeof_buf - 1),
612 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
614 KUNIT_EXPECT_EQ(test, pad.buf[sizeof_buf - 1], '\0');
615 KUNIT_EXPECT_EQ(test, pad.buf[sizeof_buf - 2], '\0');
616 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 3], '\0');
619 KUNIT_ASSERT_EQ(test, strscpy(pad.buf, src, sizeof_buf),
621 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
623 KUNIT_EXPECT_EQ(test, pad.buf[sizeof_buf - 1], '\0');
624 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 2], '\0');
625 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 2], '\0');
628 KUNIT_ASSERT_EQ(test, strscpy(pad.buf, src, sizeof_buf + 1),
631 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 1);
632 KUNIT_EXPECT_EQ(test, pad.buf[sizeof_buf - 1], '\0');
633 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 2], '\0');
634 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 2], '\0');
636 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
639 KUNIT_ASSERT_EQ(test, strscpy(pad.buf, src, sizeof_src * 2),
642 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 2);
643 KUNIT_EXPECT_EQ(test, pad.buf[sizeof_buf - 1], '\0');
644 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 2], '\0');
645 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 2], '\0');
647 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
650 static void fortify_test_strcat(struct kunit *test)
663 KUNIT_EXPECT_EQ(test, pad.bytes_before, 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_EQ(test, pad.buf[sizeof(pad.buf) - 3], '\0');
667 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
670 KUNIT_ASSERT_TRUE(test, strcat(pad.buf, src) == pad.buf);
671 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
673 KUNIT_ASSERT_TRUE(test, strcat(pad.buf, src) == pad.buf);
674 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
676 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
677 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 2], '\0');
678 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
681 KUNIT_ASSERT_TRUE(test, strcat(pad.buf, one) == pad.buf);
682 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
684 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
685 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
686 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
689 KUNIT_ASSERT_TRUE(test, strcat(pad.buf, one) == pad.buf);
690 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 1);
692 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
693 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
694 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
695 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
698 KUNIT_ASSERT_TRUE(test, strcat(pad.buf, two) == pad.buf);
699 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 2);
701 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
702 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
703 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
704 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
707 static void fortify_test_strncat(struct kunit *test)
719 KUNIT_EXPECT_EQ(test, pad.bytes_before, 0);
720 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
721 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 2], '\0');
722 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 3], '\0');
723 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
726 KUNIT_ASSERT_TRUE(test, strncat(pad.buf, src, partial) == pad.buf);
727 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
728 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
730 KUNIT_ASSERT_TRUE(test, strncat(pad.buf, src, partial) == pad.buf);
731 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
732 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
734 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
735 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 2], '\0');
736 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
739 KUNIT_ASSERT_TRUE(test, strncat(pad.buf, src, 1) == pad.buf);
740 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
741 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
743 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
744 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
745 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
748 KUNIT_ASSERT_TRUE(test, strncat(pad.buf, src, 1) == pad.buf);
749 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
750 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 1);
752 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
753 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
754 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
755 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
758 KUNIT_ASSERT_TRUE(test, strncat(pad.buf, src, 2) == pad.buf);
759 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
760 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 2);
762 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
763 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
764 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
765 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
769 KUNIT_ASSERT_TRUE(test, strncat(pad.buf, src, 1) == pad.buf);
771 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1);
772 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 3);
773 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 1], '\0');
774 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
775 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
777 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
780 static void fortify_test_strlcat(struct kunit *test)
795 KUNIT_EXPECT_EQ(test, pad.bytes_before, 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_EQ(test, pad.buf[sizeof(pad.buf) - 3], '\0');
799 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
802 KUNIT_ASSERT_EQ(test, strlcat(pad.buf, src, len), partial);
803 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
804 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
806 KUNIT_ASSERT_EQ(test, strlcat(pad.buf, src, len), partial * 2);
807 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
808 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
810 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
811 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 2], '\0');
812 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
815 KUNIT_ASSERT_EQ(test, strlcat(pad.buf, "Q", len), partial * 2 + 1);
816 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
817 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0);
819 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
820 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
821 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
824 KUNIT_ASSERT_EQ(test, strlcat(pad.buf, "V", len * 2), len);
825 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
826 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 1);
828 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
829 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
830 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
831 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
834 KUNIT_ASSERT_EQ(test, strlcat(pad.buf, "QQ", len * 2), len + 1);
835 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
836 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 2);
838 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
839 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
840 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
841 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
845 KUNIT_ASSERT_EQ(test, strlcat(pad.buf, "TT", len * 2), len + 2);
847 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2);
848 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 2);
849 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 1], '\0');
850 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0');
851 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0');
853 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
858 KUNIT_ASSERT_EQ(test, strlcat(pad.buf, src, len * 3), len - 1 + sizeof(src));
860 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 3);
861 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 3);
862 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0');
864 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0);
875 static void fortify_test_##memfunc(struct kunit *test) \
888 KUNIT_ASSERT_EQ(test, srcA[0], 'A'); \
890 KUNIT_ASSERT_EQ(test, srcB[0], 'B'); \
893 KUNIT_EXPECT_EQ(test, pad.buf[0], '\0'); \
894 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); \
895 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); \
897 KUNIT_EXPECT_EQ(test, pad.buf[0], '\0'); \
898 KUNIT_EXPECT_EQ(test, pad.buf[1], 'B'); \
899 KUNIT_EXPECT_EQ(test, pad.buf[2], '\0'); \
900 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); \
901 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); \
903 KUNIT_EXPECT_EQ(test, pad.buf[0], 'A'); \
904 KUNIT_EXPECT_EQ(test, pad.buf[1], 'B'); \
905 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); \
906 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); \
908 KUNIT_EXPECT_EQ(test, pad.buf[1], 'A'); \
909 KUNIT_EXPECT_EQ(test, pad.buf[len - 1], '\0'); \
910 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); \
911 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); \
913 KUNIT_EXPECT_EQ(test, pad.buf[1], 'A'); \
914 KUNIT_EXPECT_EQ(test, pad.buf[len - 1], 'A'); \
915 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0); \
916 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); \
917 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); \
919 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); \
920 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 1); \
922 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); \
923 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 2); \
929 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); \
930 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); \
932 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); \
933 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 1); \
938 static void fortify_test_memscan(struct kunit *test)
947 KUNIT_ASSERT_PTR_EQ(test, memscan(haystack, needle, len),
949 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
951 KUNIT_ASSERT_PTR_EQ(test, memscan(haystack, needle, len + 1),
953 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1);
954 KUNIT_ASSERT_PTR_EQ(test, memscan(haystack, needle, len * 2),
956 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2);
959 static void fortify_test_memchr(struct kunit *test)
968 KUNIT_ASSERT_PTR_EQ(test, memchr(haystack, needle, len),
970 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
972 KUNIT_ASSERT_PTR_EQ(test, memchr(haystack, needle, len + 1),
974 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1);
975 KUNIT_ASSERT_PTR_EQ(test, memchr(haystack, needle, len * 2),
977 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2);
980 static void fortify_test_memchr_inv(struct kunit *test)
990 KUNIT_ASSERT_PTR_EQ(test, memchr_inv(haystack, needle, len),
992 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
994 KUNIT_ASSERT_PTR_EQ(test, memchr_inv(haystack, needle, len + 1),
996 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1);
997 KUNIT_ASSERT_PTR_EQ(test, memchr_inv(haystack, needle, len * 2),
999 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2);
1002 static void fortify_test_memcmp(struct kunit *test)
1013 KUNIT_ASSERT_EQ(test, memcmp(one, two, one_len), 0);
1014 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
1016 KUNIT_ASSERT_LT(test, memcmp(one, two, one_len + 1), 0);
1017 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
1020 KUNIT_ASSERT_EQ(test, memcmp(one, two, one_len + 2), INT_MIN);
1021 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1);
1023 KUNIT_ASSERT_EQ(test, memcmp(two, one, two_len + 2), INT_MIN);
1024 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2);
1027 static void fortify_test_kmemdup(struct kunit *test)
1037 KUNIT_EXPECT_NOT_NULL(test, copy);
1038 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
1043 KUNIT_EXPECT_NOT_NULL(test, copy);
1044 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
1049 KUNIT_EXPECT_NOT_NULL(test, copy);
1050 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0);
1055 KUNIT_EXPECT_PTR_EQ(test, copy, ZERO_SIZE_PTR);
1056 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1);
1061 KUNIT_EXPECT_PTR_EQ(test, copy, ZERO_SIZE_PTR);
1062 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2);
1067 KUNIT_EXPECT_PTR_EQ(test, copy, ZERO_SIZE_PTR);
1068 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 3);
1072 static int fortify_test_init(struct kunit *test)
1075 kunit_skip(test, "Not built with CONFIG_FORTIFY_SOURCE=y");
1078 kunit_add_named_resource(test, NULL, NULL, &read_resource,
1082 kunit_add_named_resource(test, NULL, NULL, &write_resource,
1127 MODULE_DESCRIPTION("Runtime test cases for CONFIG_FORTIFY_SOURCE");