lib: overflow: Do not define 64-bit tests on 32-bit
[ Upstream commit 6a022dd29f2cefbac4895a34e2e1f14b2d12d819 ] The 64-bit overflow tests will trigger 64-bit division on 32-bit hosts, which is not currently used anywhere in the kernel, and tickles bugs in at least Clang 13 and earlier: https://github.com/ClangBuiltLinux/linux/issues/1636 In reality, there shouldn't be a reason to not build the 64-bit test cases on 32-bit systems, so these #ifdefs can be removed once the minimum Clang version reaches 13. In the meantime, silence W=1 warnings given by the current code: ../lib/overflow_kunit.c:191:19: warning: 's64_tests' defined but not used [-Wunused-const-variable=] 191 | DEFINE_TEST_ARRAY(s64) = { | ^~~ ../lib/overflow_kunit.c:24:11: note: in definition of macro 'DEFINE_TEST_ARRAY' 24 | } t ## _tests[] | ^ ../lib/overflow_kunit.c:94:19: warning: 'u64_tests' defined but not used [-Wunused-const-variable=] 94 | DEFINE_TEST_ARRAY(u64) = { | ^~~ ../lib/overflow_kunit.c:24:11: note: in definition of macro 'DEFINE_TEST_ARRAY' 24 | } t ## _tests[] | ^ Reported-by: kernel test robot <lkp@intel.com> Link: https://lore.kernel.org/lkml/202205110324.7GrtxG8u-lkp@intel.com Fixes: 455a35a6cdb6 ("lib: add runtime test of check_*_overflow functions") Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk> Cc: Nick Desaulniers <ndesaulniers@google.com> Cc: Vitor Massaru Iha <vitor@massaru.org> Cc: "Gustavo A. R. Silva" <gustavoars@kernel.org> Tested-by: Daniel Latypov <dlatypov@google.com> Link: https://lore.kernel.org/lkml/CAGS_qxokQAjQRip2vPi80toW7hmBnXf=KMTNT51B1wuDqSZuVQ@mail.gmail.com Signed-off-by: Kees Cook <keescook@chromium.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
aa6a7c9535
commit
f919fb3d3c
@ -91,6 +91,7 @@ DEFINE_TEST_ARRAY(u32) = {
|
||||
{-4U, 5U, 1U, -9U, -20U, true, false, true},
|
||||
};
|
||||
|
||||
#if BITS_PER_LONG == 64
|
||||
DEFINE_TEST_ARRAY(u64) = {
|
||||
{0, 0, 0, 0, 0, false, false, false},
|
||||
{1, 1, 2, 0, 1, false, false, false},
|
||||
@ -114,6 +115,7 @@ DEFINE_TEST_ARRAY(u64) = {
|
||||
false, true, false},
|
||||
{-15ULL, 10ULL, -5ULL, -25ULL, -150ULL, false, false, true},
|
||||
};
|
||||
#endif
|
||||
|
||||
DEFINE_TEST_ARRAY(s8) = {
|
||||
{0, 0, 0, 0, 0, false, false, false},
|
||||
@ -188,6 +190,8 @@ DEFINE_TEST_ARRAY(s32) = {
|
||||
{S32_MIN, S32_MIN, 0, 0, 0, true, false, true},
|
||||
{S32_MAX, S32_MAX, -2, 0, 1, true, false, true},
|
||||
};
|
||||
|
||||
#if BITS_PER_LONG == 64
|
||||
DEFINE_TEST_ARRAY(s64) = {
|
||||
{0, 0, 0, 0, 0, false, false, false},
|
||||
|
||||
@ -216,6 +220,7 @@ DEFINE_TEST_ARRAY(s64) = {
|
||||
{-128, -1, -129, -127, 128, false, false, false},
|
||||
{0, -S64_MAX, -S64_MAX, S64_MAX, 0, false, false, false},
|
||||
};
|
||||
#endif
|
||||
|
||||
#define check_one_op(t, fmt, op, sym, a, b, r, of) do { \
|
||||
t _r; \
|
||||
@ -650,6 +655,7 @@ static struct kunit_case overflow_test_cases[] = {
|
||||
KUNIT_CASE(s16_overflow_test),
|
||||
KUNIT_CASE(u32_overflow_test),
|
||||
KUNIT_CASE(s32_overflow_test),
|
||||
/* Clang 13 and earlier generate unwanted libcalls on 32-bit. */
|
||||
#if BITS_PER_LONG == 64
|
||||
KUNIT_CASE(u64_overflow_test),
|
||||
KUNIT_CASE(s64_overflow_test),
|
||||
|
Loading…
x
Reference in New Issue
Block a user