Lines Matching full: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) in fortify_test_known_sizes() argument
87 char stack[80] = "Test!"; in fortify_test_known_sizes()
89 KUNIT_EXPECT_FALSE(test, __is_constexpr(__builtin_strlen(stack))); in fortify_test_known_sizes()
90 KUNIT_EXPECT_EQ(test, __compiletime_strlen(stack), 5); in fortify_test_known_sizes()
92 KUNIT_EXPECT_TRUE(test, __is_constexpr(__builtin_strlen("88888888"))); in fortify_test_known_sizes()
93 KUNIT_EXPECT_EQ(test, __compiletime_strlen("88888888"), 8); in fortify_test_known_sizes()
95 KUNIT_EXPECT_TRUE(test, __is_constexpr(__builtin_strlen(array_of_10))); in fortify_test_known_sizes()
96 KUNIT_EXPECT_EQ(test, __compiletime_strlen(array_of_10), 10); in fortify_test_known_sizes()
98 KUNIT_EXPECT_FALSE(test, __is_constexpr(__builtin_strlen(ptr_of_11))); in fortify_test_known_sizes()
99 KUNIT_EXPECT_EQ(test, __compiletime_strlen(ptr_of_11), 11); in fortify_test_known_sizes()
101 KUNIT_EXPECT_TRUE(test, __is_constexpr(__builtin_strlen(unchanging_12))); in fortify_test_known_sizes()
102 KUNIT_EXPECT_EQ(test, __compiletime_strlen(unchanging_12), 12); in fortify_test_known_sizes()
104 KUNIT_EXPECT_FALSE(test, __is_constexpr(__builtin_strlen(array_unknown))); in fortify_test_known_sizes()
105 KUNIT_EXPECT_EQ(test, __compiletime_strlen(array_unknown), SIZE_MAX); in fortify_test_known_sizes()
108 KUNIT_EXPECT_FALSE(test, __is_constexpr(__builtin_strlen(test->name))); in fortify_test_known_sizes()
109 KUNIT_EXPECT_EQ(test, __compiletime_strlen(test->name), SIZE_MAX); in fortify_test_known_sizes()
134 static void fortify_test_control_flow_split(struct kunit *test) in fortify_test_control_flow_split() argument
136 KUNIT_EXPECT_EQ(test, want_minus_one(pick), SIZE_MAX); in fortify_test_control_flow_split()
139 #define KUNIT_EXPECT_BOS(test, p, expected, name) \ argument
140 KUNIT_EXPECT_EQ_MSG(test, __builtin_object_size(p, 1), \
145 #define KUNIT_EXPECT_BDOS(test, p, expected, name) \ argument
147 KUNIT_EXPECT_EQ(test, expected, expected)
149 #define KUNIT_EXPECT_BDOS(test, p, expected, name) \ argument
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) in fortify_test_realloc_size() argument
415 static void fortify_test_strlen(struct kunit *test) in fortify_test_strlen() argument
424 KUNIT_EXPECT_EQ(test, pad.buf[end], '\0'); in fortify_test_strlen()
425 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0); in fortify_test_strlen()
428 KUNIT_EXPECT_EQ(test, strlen(pad.buf), end); in fortify_test_strlen()
429 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); in fortify_test_strlen()
434 KUNIT_EXPECT_EQ(test, strlen(pad.buf), end); in fortify_test_strlen()
435 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1); in fortify_test_strlen()
438 static void fortify_test_strnlen(struct kunit *test) in fortify_test_strnlen() argument
447 KUNIT_EXPECT_EQ(test, pad.buf[end], '\0'); in fortify_test_strnlen()
448 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0); in fortify_test_strnlen()
451 KUNIT_EXPECT_EQ(test, strnlen(pad.buf, sizeof(pad.buf)), end); in fortify_test_strnlen()
452 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); in fortify_test_strnlen()
454 KUNIT_EXPECT_EQ(test, strnlen(pad.buf, sizeof(pad.buf) / 2), in fortify_test_strnlen()
456 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); in fortify_test_strnlen()
462 KUNIT_EXPECT_EQ(test, strnlen(pad.buf, end + 1), end); in fortify_test_strnlen()
463 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1); in fortify_test_strnlen()
464 KUNIT_EXPECT_EQ(test, strnlen(pad.buf, end + 2), end); in fortify_test_strnlen()
465 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2); in fortify_test_strnlen()
468 KUNIT_EXPECT_EQ(test, strnlen(pad.buf, end), end); in fortify_test_strnlen()
469 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2); in fortify_test_strnlen()
472 KUNIT_EXPECT_EQ(test, strnlen(pad.buf, end), end); in fortify_test_strnlen()
473 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2); in fortify_test_strnlen()
476 static void fortify_test_strcpy(struct kunit *test) in fortify_test_strcpy() argument
487 KUNIT_EXPECT_EQ(test, pad.bytes_before, 0); in fortify_test_strcpy()
488 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0'); in fortify_test_strcpy()
489 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 2], '\0'); in fortify_test_strcpy()
490 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 3], '\0'); in fortify_test_strcpy()
491 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0); in fortify_test_strcpy()
494 KUNIT_ASSERT_TRUE(test, strcpy(pad.buf, src) in fortify_test_strcpy()
496 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); in fortify_test_strcpy()
497 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); in fortify_test_strcpy()
499 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0'); in fortify_test_strcpy()
500 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0'); in fortify_test_strcpy()
501 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0'); in fortify_test_strcpy()
505 KUNIT_ASSERT_TRUE(test, strcpy(pad.buf, src) in fortify_test_strcpy()
507 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); in fortify_test_strcpy()
508 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 1); in fortify_test_strcpy()
510 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0'); in fortify_test_strcpy()
511 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0'); in fortify_test_strcpy()
512 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0'); in fortify_test_strcpy()
514 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0); in fortify_test_strcpy()
518 KUNIT_ASSERT_TRUE(test, strcpy(pad.buf, src) in fortify_test_strcpy()
524 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1); in fortify_test_strcpy()
525 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 2); in fortify_test_strcpy()
527 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0'); in fortify_test_strcpy()
528 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0'); in fortify_test_strcpy()
529 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0'); in fortify_test_strcpy()
531 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0); in fortify_test_strcpy()
534 static void fortify_test_strncpy(struct kunit *test) in fortify_test_strncpy() argument
543 KUNIT_EXPECT_EQ(test, pad.bytes_before, 0); in fortify_test_strncpy()
544 KUNIT_EXPECT_EQ(test, pad.buf[sizeof_buf - 1], '\0'); in fortify_test_strncpy()
545 KUNIT_EXPECT_EQ(test, pad.buf[sizeof_buf - 2], '\0'); in fortify_test_strncpy()
546 KUNIT_EXPECT_EQ(test, pad.buf[sizeof_buf - 3], '\0'); in fortify_test_strncpy()
547 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0); in fortify_test_strncpy()
550 KUNIT_ASSERT_TRUE(test, strncpy(pad.buf, src, sizeof_buf - 1) in fortify_test_strncpy()
552 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); in fortify_test_strncpy()
554 KUNIT_EXPECT_EQ(test, pad.buf[sizeof_buf - 1], '\0'); in fortify_test_strncpy()
555 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 2], '\0'); in fortify_test_strncpy()
556 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 3], '\0'); in fortify_test_strncpy()
559 KUNIT_ASSERT_TRUE(test, strncpy(pad.buf, src, sizeof_buf) in fortify_test_strncpy()
561 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); in fortify_test_strncpy()
563 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 1], '\0'); in fortify_test_strncpy()
564 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 2], '\0'); in fortify_test_strncpy()
565 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 2], '\0'); in fortify_test_strncpy()
567 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0); in fortify_test_strncpy()
570 KUNIT_ASSERT_TRUE(test, strncpy(pad.buf, src, sizeof_buf + 1) in fortify_test_strncpy()
573 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 1); in fortify_test_strncpy()
574 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 1], '\0'); in fortify_test_strncpy()
575 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 2], '\0'); in fortify_test_strncpy()
576 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 2], '\0'); in fortify_test_strncpy()
578 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0); in fortify_test_strncpy()
581 KUNIT_ASSERT_TRUE(test, strncpy(pad.buf, src, sizeof_buf + 2) in fortify_test_strncpy()
584 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 2); in fortify_test_strncpy()
585 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 1], '\0'); in fortify_test_strncpy()
586 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 2], '\0'); in fortify_test_strncpy()
587 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 2], '\0'); in fortify_test_strncpy()
589 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0); in fortify_test_strncpy()
592 static void fortify_test_strscpy(struct kunit *test) in fortify_test_strscpy() argument
603 KUNIT_EXPECT_EQ(test, pad.bytes_before, 0); in fortify_test_strscpy()
604 KUNIT_EXPECT_EQ(test, pad.buf[sizeof_buf - 1], '\0'); in fortify_test_strscpy()
605 KUNIT_EXPECT_EQ(test, pad.buf[sizeof_buf - 2], '\0'); in fortify_test_strscpy()
606 KUNIT_EXPECT_EQ(test, pad.buf[sizeof_buf - 3], '\0'); in fortify_test_strscpy()
607 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0); in fortify_test_strscpy()
610 KUNIT_ASSERT_EQ(test, strscpy(pad.buf, src, sizeof_buf - 1), in fortify_test_strscpy()
612 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); in fortify_test_strscpy()
614 KUNIT_EXPECT_EQ(test, pad.buf[sizeof_buf - 1], '\0'); in fortify_test_strscpy()
615 KUNIT_EXPECT_EQ(test, pad.buf[sizeof_buf - 2], '\0'); in fortify_test_strscpy()
616 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 3], '\0'); in fortify_test_strscpy()
619 KUNIT_ASSERT_EQ(test, strscpy(pad.buf, src, sizeof_buf), in fortify_test_strscpy()
621 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); in fortify_test_strscpy()
623 KUNIT_EXPECT_EQ(test, pad.buf[sizeof_buf - 1], '\0'); in fortify_test_strscpy()
624 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 2], '\0'); in fortify_test_strscpy()
625 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 2], '\0'); in fortify_test_strscpy()
628 KUNIT_ASSERT_EQ(test, strscpy(pad.buf, src, sizeof_buf + 1), in fortify_test_strscpy()
631 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 1); in fortify_test_strscpy()
632 KUNIT_EXPECT_EQ(test, pad.buf[sizeof_buf - 1], '\0'); in fortify_test_strscpy()
633 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 2], '\0'); in fortify_test_strscpy()
634 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 2], '\0'); in fortify_test_strscpy()
636 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0); in fortify_test_strscpy()
639 KUNIT_ASSERT_EQ(test, strscpy(pad.buf, src, sizeof_src * 2), in fortify_test_strscpy()
642 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 2); in fortify_test_strscpy()
643 KUNIT_EXPECT_EQ(test, pad.buf[sizeof_buf - 1], '\0'); in fortify_test_strscpy()
644 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 2], '\0'); in fortify_test_strscpy()
645 KUNIT_EXPECT_NE(test, pad.buf[sizeof_buf - 2], '\0'); in fortify_test_strscpy()
647 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0); in fortify_test_strscpy()
650 static void fortify_test_strcat(struct kunit *test) in fortify_test_strcat() argument
663 KUNIT_EXPECT_EQ(test, pad.bytes_before, 0); in fortify_test_strcat()
664 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0'); in fortify_test_strcat()
665 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 2], '\0'); in fortify_test_strcat()
666 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 3], '\0'); in fortify_test_strcat()
667 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0); in fortify_test_strcat()
670 KUNIT_ASSERT_TRUE(test, strcat(pad.buf, src) == pad.buf); in fortify_test_strcat()
671 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); in fortify_test_strcat()
673 KUNIT_ASSERT_TRUE(test, strcat(pad.buf, src) == pad.buf); in fortify_test_strcat()
674 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); in fortify_test_strcat()
676 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0'); in fortify_test_strcat()
677 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 2], '\0'); in fortify_test_strcat()
678 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0'); in fortify_test_strcat()
681 KUNIT_ASSERT_TRUE(test, strcat(pad.buf, one) == pad.buf); in fortify_test_strcat()
682 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); in fortify_test_strcat()
684 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0'); in fortify_test_strcat()
685 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0'); in fortify_test_strcat()
686 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0'); in fortify_test_strcat()
689 KUNIT_ASSERT_TRUE(test, strcat(pad.buf, one) == pad.buf); in fortify_test_strcat()
690 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 1); in fortify_test_strcat()
692 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0'); in fortify_test_strcat()
693 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0'); in fortify_test_strcat()
694 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0'); in fortify_test_strcat()
695 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0); in fortify_test_strcat()
698 KUNIT_ASSERT_TRUE(test, strcat(pad.buf, two) == pad.buf); in fortify_test_strcat()
699 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 2); in fortify_test_strcat()
701 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0'); in fortify_test_strcat()
702 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0'); in fortify_test_strcat()
703 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0'); in fortify_test_strcat()
704 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0); in fortify_test_strcat()
707 static void fortify_test_strncat(struct kunit *test) in fortify_test_strncat() argument
719 KUNIT_EXPECT_EQ(test, pad.bytes_before, 0); in fortify_test_strncat()
720 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0'); in fortify_test_strncat()
721 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 2], '\0'); in fortify_test_strncat()
722 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 3], '\0'); in fortify_test_strncat()
723 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0); in fortify_test_strncat()
726 KUNIT_ASSERT_TRUE(test, strncat(pad.buf, src, partial) == pad.buf); in fortify_test_strncat()
727 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); in fortify_test_strncat()
728 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); in fortify_test_strncat()
730 KUNIT_ASSERT_TRUE(test, strncat(pad.buf, src, partial) == pad.buf); in fortify_test_strncat()
731 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); in fortify_test_strncat()
732 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); in fortify_test_strncat()
734 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0'); in fortify_test_strncat()
735 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 2], '\0'); in fortify_test_strncat()
736 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0'); in fortify_test_strncat()
739 KUNIT_ASSERT_TRUE(test, strncat(pad.buf, src, 1) == pad.buf); in fortify_test_strncat()
740 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); in fortify_test_strncat()
741 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); in fortify_test_strncat()
743 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0'); in fortify_test_strncat()
744 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0'); in fortify_test_strncat()
745 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0'); in fortify_test_strncat()
748 KUNIT_ASSERT_TRUE(test, strncat(pad.buf, src, 1) == pad.buf); in fortify_test_strncat()
749 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); in fortify_test_strncat()
750 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 1); in fortify_test_strncat()
752 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0'); in fortify_test_strncat()
753 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0'); in fortify_test_strncat()
754 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0'); in fortify_test_strncat()
755 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0); in fortify_test_strncat()
758 KUNIT_ASSERT_TRUE(test, strncat(pad.buf, src, 2) == pad.buf); in fortify_test_strncat()
759 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); in fortify_test_strncat()
760 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 2); in fortify_test_strncat()
762 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0'); in fortify_test_strncat()
763 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0'); in fortify_test_strncat()
764 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0'); in fortify_test_strncat()
765 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0); in fortify_test_strncat()
769 KUNIT_ASSERT_TRUE(test, strncat(pad.buf, src, 1) == pad.buf); in fortify_test_strncat()
771 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1); in fortify_test_strncat()
772 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 3); in fortify_test_strncat()
773 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 1], '\0'); in fortify_test_strncat()
774 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0'); in fortify_test_strncat()
775 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0'); in fortify_test_strncat()
777 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0); in fortify_test_strncat()
780 static void fortify_test_strlcat(struct kunit *test) in fortify_test_strlcat() argument
795 KUNIT_EXPECT_EQ(test, pad.bytes_before, 0); in fortify_test_strlcat()
796 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0'); in fortify_test_strlcat()
797 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 2], '\0'); in fortify_test_strlcat()
798 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 3], '\0'); in fortify_test_strlcat()
799 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0); in fortify_test_strlcat()
802 KUNIT_ASSERT_EQ(test, strlcat(pad.buf, src, len), partial); in fortify_test_strlcat()
803 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); in fortify_test_strlcat()
804 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); in fortify_test_strlcat()
806 KUNIT_ASSERT_EQ(test, strlcat(pad.buf, src, len), partial * 2); in fortify_test_strlcat()
807 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); in fortify_test_strlcat()
808 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); in fortify_test_strlcat()
810 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0'); in fortify_test_strlcat()
811 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 2], '\0'); in fortify_test_strlcat()
812 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0'); in fortify_test_strlcat()
815 KUNIT_ASSERT_EQ(test, strlcat(pad.buf, "Q", len), partial * 2 + 1); in fortify_test_strlcat()
816 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); in fortify_test_strlcat()
817 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 0); in fortify_test_strlcat()
819 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0'); in fortify_test_strlcat()
820 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0'); in fortify_test_strlcat()
821 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0'); in fortify_test_strlcat()
824 KUNIT_ASSERT_EQ(test, strlcat(pad.buf, "V", len * 2), len); in fortify_test_strlcat()
825 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); in fortify_test_strlcat()
826 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 1); in fortify_test_strlcat()
828 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0'); in fortify_test_strlcat()
829 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0'); in fortify_test_strlcat()
830 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0'); in fortify_test_strlcat()
831 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0); in fortify_test_strlcat()
834 KUNIT_ASSERT_EQ(test, strlcat(pad.buf, "QQ", len * 2), len + 1); in fortify_test_strlcat()
835 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); in fortify_test_strlcat()
836 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 2); in fortify_test_strlcat()
838 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0'); in fortify_test_strlcat()
839 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0'); in fortify_test_strlcat()
840 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0'); in fortify_test_strlcat()
841 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0); in fortify_test_strlcat()
845 KUNIT_ASSERT_EQ(test, strlcat(pad.buf, "TT", len * 2), len + 2); in fortify_test_strlcat()
847 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2); in fortify_test_strlcat()
848 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 2); in fortify_test_strlcat()
849 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 1], '\0'); in fortify_test_strlcat()
850 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 2], '\0'); in fortify_test_strlcat()
851 KUNIT_EXPECT_NE(test, pad.buf[sizeof(pad.buf) - 3], '\0'); in fortify_test_strlcat()
853 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0); in fortify_test_strlcat()
858 KUNIT_ASSERT_EQ(test, strlcat(pad.buf, src, len * 3), len - 1 + sizeof(src)); in fortify_test_strlcat()
860 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 3); in fortify_test_strlcat()
861 KUNIT_EXPECT_EQ(test, fortify_write_overflows, 3); in fortify_test_strlcat()
862 KUNIT_EXPECT_EQ(test, pad.buf[sizeof(pad.buf) - 1], '\0'); in fortify_test_strlcat()
864 KUNIT_EXPECT_EQ(test, pad.bytes_after, 0); in fortify_test_strlcat()
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) in __fortify_test()
947 KUNIT_ASSERT_PTR_EQ(test, memscan(haystack, needle, len), in __fortify_test()
949 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); in __fortify_test()
951 KUNIT_ASSERT_PTR_EQ(test, memscan(haystack, needle, len + 1), in __fortify_test()
953 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1); in __fortify_test()
954 KUNIT_ASSERT_PTR_EQ(test, memscan(haystack, needle, len * 2), in __fortify_test()
956 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2); in __fortify_test()
959 static void fortify_test_memchr(struct kunit *test) in fortify_test_memchr() argument
968 KUNIT_ASSERT_PTR_EQ(test, memchr(haystack, needle, len), in fortify_test_memchr()
970 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); in fortify_test_memchr()
972 KUNIT_ASSERT_PTR_EQ(test, memchr(haystack, needle, len + 1), in fortify_test_memchr()
974 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1); in fortify_test_memchr()
975 KUNIT_ASSERT_PTR_EQ(test, memchr(haystack, needle, len * 2), in fortify_test_memchr()
977 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2); in fortify_test_memchr()
980 static void fortify_test_memchr_inv(struct kunit *test) in fortify_test_memchr_inv() argument
990 KUNIT_ASSERT_PTR_EQ(test, memchr_inv(haystack, needle, len), in fortify_test_memchr_inv()
992 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); in fortify_test_memchr_inv()
994 KUNIT_ASSERT_PTR_EQ(test, memchr_inv(haystack, needle, len + 1), in fortify_test_memchr_inv()
996 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1); in fortify_test_memchr_inv()
997 KUNIT_ASSERT_PTR_EQ(test, memchr_inv(haystack, needle, len * 2), in fortify_test_memchr_inv()
999 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2); in fortify_test_memchr_inv()
1002 static void fortify_test_memcmp(struct kunit *test) in fortify_test_memcmp() argument
1013 KUNIT_ASSERT_EQ(test, memcmp(one, two, one_len), 0); in fortify_test_memcmp()
1014 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); in fortify_test_memcmp()
1016 KUNIT_ASSERT_LT(test, memcmp(one, two, one_len + 1), 0); in fortify_test_memcmp()
1017 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); in fortify_test_memcmp()
1020 KUNIT_ASSERT_EQ(test, memcmp(one, two, one_len + 2), INT_MIN); in fortify_test_memcmp()
1021 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1); in fortify_test_memcmp()
1023 KUNIT_ASSERT_EQ(test, memcmp(two, one, two_len + 2), INT_MIN); in fortify_test_memcmp()
1024 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2); in fortify_test_memcmp()
1027 static void fortify_test_kmemdup(struct kunit *test) in fortify_test_kmemdup() argument
1037 KUNIT_EXPECT_NOT_NULL(test, copy); in fortify_test_kmemdup()
1038 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); in fortify_test_kmemdup()
1043 KUNIT_EXPECT_NOT_NULL(test, copy); in fortify_test_kmemdup()
1044 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); in fortify_test_kmemdup()
1049 KUNIT_EXPECT_NOT_NULL(test, copy); in fortify_test_kmemdup()
1050 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 0); in fortify_test_kmemdup()
1055 KUNIT_EXPECT_PTR_EQ(test, copy, ZERO_SIZE_PTR); in fortify_test_kmemdup()
1056 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 1); in fortify_test_kmemdup()
1061 KUNIT_EXPECT_PTR_EQ(test, copy, ZERO_SIZE_PTR); in fortify_test_kmemdup()
1062 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 2); in fortify_test_kmemdup()
1067 KUNIT_EXPECT_PTR_EQ(test, copy, ZERO_SIZE_PTR); in fortify_test_kmemdup()
1068 KUNIT_EXPECT_EQ(test, fortify_read_overflows, 3); in fortify_test_kmemdup()
1072 static int fortify_test_init(struct kunit *test) in fortify_test_init() argument
1075 kunit_skip(test, "Not built with CONFIG_FORTIFY_SOURCE=y"); in fortify_test_init()
1078 kunit_add_named_resource(test, NULL, NULL, &read_resource, in fortify_test_init()
1082 kunit_add_named_resource(test, NULL, NULL, &write_resource, in fortify_test_init()
1127 MODULE_DESCRIPTION("Runtime test cases for CONFIG_FORTIFY_SOURCE");