mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 02:24:24 +02:00
kunit/fortify: Expand testing of __compiletime_strlen()
It seems that Clang thinks __builtin_constant_p() of undefined variables should return true[1]. This is being fixed separately[2], but in the meantime, expand the fortify tests to help track this kind of thing down faster in the future. Link: https://github.com/ClangBuiltLinux/linux/issues/2073 [1] Link: https://github.com/llvm/llvm-project/pull/130713 [2] Link: https://lore.kernel.org/r/20250312000349.work.786-kees@kernel.org Signed-off-by: Kees Cook <kees@kernel.org>
This commit is contained in:
parent
d985e4399a
commit
416cf1f4d9
|
|
@ -60,6 +60,7 @@ static int fortify_write_overflows;
|
|||
|
||||
static const char array_of_10[] = "this is 10";
|
||||
static const char *ptr_of_11 = "this is 11!";
|
||||
static const char * const unchanging_12 = "this is 12!!";
|
||||
static char array_unknown[] = "compiler thinks I might change";
|
||||
|
||||
void fortify_add_kunit_error(int write)
|
||||
|
|
@ -83,12 +84,28 @@ void fortify_add_kunit_error(int write)
|
|||
|
||||
static void fortify_test_known_sizes(struct kunit *test)
|
||||
{
|
||||
char stack[80] = "Test!";
|
||||
|
||||
KUNIT_EXPECT_FALSE(test, __is_constexpr(__builtin_strlen(stack)));
|
||||
KUNIT_EXPECT_EQ(test, __compiletime_strlen(stack), 5);
|
||||
|
||||
KUNIT_EXPECT_TRUE(test, __is_constexpr(__builtin_strlen("88888888")));
|
||||
KUNIT_EXPECT_EQ(test, __compiletime_strlen("88888888"), 8);
|
||||
|
||||
KUNIT_EXPECT_TRUE(test, __is_constexpr(__builtin_strlen(array_of_10)));
|
||||
KUNIT_EXPECT_EQ(test, __compiletime_strlen(array_of_10), 10);
|
||||
|
||||
KUNIT_EXPECT_FALSE(test, __is_constexpr(__builtin_strlen(ptr_of_11)));
|
||||
KUNIT_EXPECT_EQ(test, __compiletime_strlen(ptr_of_11), 11);
|
||||
|
||||
KUNIT_EXPECT_TRUE(test, __is_constexpr(__builtin_strlen(unchanging_12)));
|
||||
KUNIT_EXPECT_EQ(test, __compiletime_strlen(unchanging_12), 12);
|
||||
|
||||
KUNIT_EXPECT_FALSE(test, __is_constexpr(__builtin_strlen(array_unknown)));
|
||||
KUNIT_EXPECT_EQ(test, __compiletime_strlen(array_unknown), SIZE_MAX);
|
||||
|
||||
/* Externally defined and dynamically sized string pointer: */
|
||||
KUNIT_EXPECT_FALSE(test, __is_constexpr(__builtin_strlen(test->name)));
|
||||
KUNIT_EXPECT_EQ(test, __compiletime_strlen(test->name), SIZE_MAX);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user