[<prev] [next>] [day] [month] [year] [list]
Message-ID: <202207051135.RcGXqwnQ-lkp@intel.com>
Date: Tue, 5 Jul 2022 11:18:22 +0800
From: kernel test robot <lkp@...el.com>
To: Kees Cook <keescook@...omium.org>
Cc: llvm@...ts.linux.dev, kbuild-all@...ts.01.org,
linux-kernel@...r.kernel.org
Subject: lib/stackinit_kunit.c:259:8: warning: Excessive padding in 'struct
test_big_hole' (124 padding bytes, where 60 is optimal). Optimal fields
order: four, one, two, three, consider reordering the fields or adding
explicit padding members [clang-analyzer-opti...
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: c1084b6c5620a743f86947caca66d90f24060f56
commit: 02788ebcf521fe78c24eb221fd1ed7f86792c330 lib: stackinit: Convert to KUnit
date: 4 months ago
config: riscv-randconfig-c006-20220703 (https://download.01.org/0day-ci/archive/20220705/202207051135.RcGXqwnQ-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project f7a80c3d08d4821e621fc88d6a2e435291f82dff)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install riscv cross compiling tool for clang build
# apt-get install binutils-riscv-linux-gnu
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=02788ebcf521fe78c24eb221fd1ed7f86792c330
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout 02788ebcf521fe78c24eb221fd1ed7f86792c330
# save the config file
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv clang-analyzer
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@...el.com>
clang-analyzer warnings: (new ones prefixed by >>)
include/asm-generic/bug.h:161:27: note: expanded from macro 'BUG_ON'
#define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0)
^
fs/reiserfs/inode.c:1943:6: note: 'err' is 0
if (err)
^~~
fs/reiserfs/inode.c:1943:2: note: Taking false branch
if (err)
^
fs/reiserfs/inode.c:1945:6: note: Assuming field 'i_nlink' is not equal to 0
if (!dir->i_nlink) {
^~~~~~~~~~~~~
fs/reiserfs/inode.c:1945:2: note: Taking false branch
if (!dir->i_nlink) {
^
fs/reiserfs/inode.c:1953:6: note: Assuming field 'k_objectid' is not equal to 0
if (!ih.ih_key.k_objectid) {
^~~~~~~~~~~~~~~~~~~~~
fs/reiserfs/inode.c:1953:2: note: Taking false branch
if (!ih.ih_key.k_objectid) {
^
fs/reiserfs/inode.c:1958:6: note: Assuming the condition is false
if (old_format_only(sb))
^
fs/reiserfs/reiserfs.h:728:29: note: expanded from macro 'old_format_only'
#define old_format_only(s) (REISERFS_SB(s)->s_properties & (1 << REISERFS_3_5))
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/reiserfs/inode.c:1958:2: note: Taking false branch
if (old_format_only(sb))
^
fs/reiserfs/inode.c:1962:3: note: Calling 'make_le_item_head'
make_le_item_head(&ih, NULL, KEY_FORMAT_3_6, SD_OFFSET,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/reiserfs/inode.c:142:6: note: 'key' is null
if (key) {
^~~
fs/reiserfs/inode.c:142:2: note: Taking false branch
if (key) {
^
fs/reiserfs/inode.c:147:2: note: Loop condition is false. Exiting loop
put_ih_version(ih, version);
^
fs/reiserfs/reiserfs.h:1403:38: note: expanded from macro 'put_ih_version'
#define put_ih_version(ih, val) do { (ih)->ih_version = cpu_to_le16(val); } while (0)
^
fs/reiserfs/inode.c:148:2: note: Calling 'set_le_ih_k_offset'
set_le_ih_k_offset(ih, offset);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/reiserfs/reiserfs.h:1522:2: note: Calling 'set_le_key_k_offset'
set_le_key_k_offset(ih_version(ih), &(ih->ih_key), offset);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/reiserfs/reiserfs.h:1502:6: note: 'version' is not equal to KEY_FORMAT_3_5
if (version == KEY_FORMAT_3_5)
^~~~~~~
fs/reiserfs/reiserfs.h:1502:2: note: Taking false branch
if (version == KEY_FORMAT_3_5)
^
fs/reiserfs/reiserfs.h:1505:3: note: Calling 'set_offset_v2_k_offset'
set_offset_v2_k_offset(&key->u.k_offset_v2, offset);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/reiserfs/reiserfs.h:1280:17: note: The left operand of '&' is a garbage value
v2->v = (v2->v & cpu_to_le64(15ULL << 60)) | cpu_to_le64(offset);
~~~~~ ^
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
1 warning generated.
Suppressed 1 warnings (1 with check filters).
1 warning generated.
Suppressed 1 warnings (1 with check filters).
3 warnings generated.
Suppressed 3 warnings (2 in non-user code, 1 with check filters).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
3 warnings generated.
Suppressed 3 warnings (2 in non-user code, 1 with check filters).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
2 warnings generated.
Suppressed 2 warnings (2 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
4 warnings generated.
Suppressed 4 warnings (2 in non-user code, 2 with check filters).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
135 warnings generated.
>> lib/stackinit_kunit.c:259:8: warning: Excessive padding in 'struct test_big_hole' (124 padding bytes, where 60 is optimal). Optimal fields order: four, one, two, three, consider reordering the fields or adding explicit padding members [clang-analyzer-optin.performance.Padding]
struct test_big_hole {
~~~~~~~^~~~~~~~~~~~~~~
lib/stackinit_kunit.c:259:8: note: Excessive padding in 'struct test_big_hole' (124 padding bytes, where 60 is optimal). Optimal fields order: four, one, two, three, consider reordering the fields or adding explicit padding members
struct test_big_hole {
~~~~~~~^~~~~~~~~~~~~~~
lib/stackinit_kunit.c:333:1: warning: Address of stack memory associated with local variable 'var' is still referred to by the global variable 'fill_start' upon returning to the caller. This will be a dangling reference [clang-analyzer-core.StackAddressEscape]
DEFINE_SCALAR_TESTS(zero, ALWAYS_PASS);
^
lib/stackinit_kunit.c:309:3: note: expanded from macro 'DEFINE_SCALAR_TESTS'
DEFINE_SCALAR_TEST(u8, init, xfail); \
^
lib/stackinit_kunit.c:305:3: note: expanded from macro 'DEFINE_SCALAR_TEST'
DEFINE_TEST(name ## _ ## init, name, SCALAR, \
^
lib/stackinit_kunit.c:237:2: note: expanded from macro 'DEFINE_TEST'
return (int)buf[0] | (int)buf[sizeof(buf) - 1]; \
^
lib/stackinit_kunit.c:333:1: note: Taking false branch
DEFINE_SCALAR_TESTS(zero, ALWAYS_PASS);
^
lib/stackinit_kunit.c:309:3: note: expanded from macro 'DEFINE_SCALAR_TESTS'
DEFINE_SCALAR_TEST(u8, init, xfail); \
^
lib/stackinit_kunit.c:305:3: note: expanded from macro 'DEFINE_SCALAR_TEST'
DEFINE_TEST(name ## _ ## init, name, SCALAR, \
^
lib/stackinit_kunit.c:238:10: note: expanded from macro 'DEFINE_TEST'
} \
^
note: (skipping 3 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
include/linux/compiler_types.h:346:2: note: expanded from macro 'compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
^
include/linux/compiler_types.h:334:2: note: expanded from macro '_compiletime_assert'
__compiletime_assert(condition, msg, prefix, suffix)
^
include/linux/compiler_types.h:326:3: note: expanded from macro '__compiletime_assert'
if (!(condition)) \
^
lib/stackinit_kunit.c:333:1: note: Loop condition is false. Exiting loop
DEFINE_SCALAR_TESTS(zero, ALWAYS_PASS);
^
lib/stackinit_kunit.c:309:3: note: expanded from macro 'DEFINE_SCALAR_TESTS'
DEFINE_SCALAR_TEST(u8, init, xfail); \
^
lib/stackinit_kunit.c:305:3: note: expanded from macro 'DEFINE_SCALAR_TEST'
DEFINE_TEST(name ## _ ## init, name, SCALAR, \
^
lib/stackinit_kunit.c:238:10: note: expanded from macro 'DEFINE_TEST'
} \
^
note: (skipping 3 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
include/linux/compiler_types.h:346:2: note: expanded from macro 'compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
^
include/linux/compiler_types.h:334:2: note: expanded from macro '_compiletime_assert'
__compiletime_assert(condition, msg, prefix, suffix)
^
include/linux/compiler_types.h:318:2: note: expanded from macro '__compiletime_assert'
do { \
^
lib/stackinit_kunit.c:333:1: note: Calling 'leaf_u8_zero'
DEFINE_SCALAR_TESTS(zero, ALWAYS_PASS);
^
lib/stackinit_kunit.c:309:3: note: expanded from macro 'DEFINE_SCALAR_TESTS'
DEFINE_SCALAR_TEST(u8, init, xfail); \
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
lib/stackinit_kunit.c:305:3: note: expanded from macro 'DEFINE_SCALAR_TEST'
DEFINE_TEST(name ## _ ## init, name, SCALAR, \
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
lib/stackinit_kunit.c:238:10: note: expanded from macro 'DEFINE_TEST'
} \
^
lib/stackinit_kunit.c:163:12: note: expanded from macro '\
DEFINE_TEST_DRIVER'
ignored = leaf_ ##name((unsigned long)&ignored, 1, \
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
note: expanded from here
lib/stackinit_kunit.c:333:1: note: 'fill' is true
DEFINE_SCALAR_TESTS(zero, ALWAYS_PASS);
^
lib/stackinit_kunit.c:309:3: note: expanded from macro 'DEFINE_SCALAR_TESTS'
DEFINE_SCALAR_TEST(u8, init, xfail); \
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
lib/stackinit_kunit.c:305:3: note: expanded from macro 'DEFINE_SCALAR_TEST'
DEFINE_TEST(name ## _ ## init, name, SCALAR, \
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
lib/stackinit_kunit.c:223:6: note: expanded from macro 'DEFINE_TEST'
if (fill) { \
^~~~
lib/stackinit_kunit.c:333:1: note: Taking true branch
DEFINE_SCALAR_TESTS(zero, ALWAYS_PASS);
^
lib/stackinit_kunit.c:309:3: note: expanded from macro 'DEFINE_SCALAR_TESTS'
DEFINE_SCALAR_TEST(u8, init, xfail); \
^
lib/stackinit_kunit.c:305:3: note: expanded from macro 'DEFINE_SCALAR_TEST'
DEFINE_TEST(name ## _ ## init, name, SCALAR, \
^
lib/stackinit_kunit.c:223:2: note: expanded from macro 'DEFINE_TEST'
vim +259 lib/stackinit_kunit.c
50ceaa95ea0970 lib/test_stackinit.c Kees Cook 2019-01-23 257
f9398f15605a50 lib/test_stackinit.c Kees Cook 2021-07-23 258 /* Trigger unhandled padding in a structure. */
50ceaa95ea0970 lib/test_stackinit.c Kees Cook 2019-01-23 @259 struct test_big_hole {
50ceaa95ea0970 lib/test_stackinit.c Kees Cook 2019-01-23 260 u8 one;
50ceaa95ea0970 lib/test_stackinit.c Kees Cook 2019-01-23 261 u8 two;
50ceaa95ea0970 lib/test_stackinit.c Kees Cook 2019-01-23 262 u8 three;
50ceaa95ea0970 lib/test_stackinit.c Kees Cook 2019-01-23 263 /* 61 byte padding hole here. */
f9398f15605a50 lib/test_stackinit.c Kees Cook 2021-07-23 264 u8 four __aligned(64);
50ceaa95ea0970 lib/test_stackinit.c Kees Cook 2019-01-23 265 } __aligned(64);
50ceaa95ea0970 lib/test_stackinit.c Kees Cook 2019-01-23 266
:::::: The code at line 259 was first introduced by commit
:::::: 50ceaa95ea09703722b30b4afa617c972071cd7f lib: Introduce test_stackinit module
:::::: TO: Kees Cook <keescook@...omium.org>
:::::: CC: Kees Cook <keescook@...omium.org>
--
0-DAY CI Kernel Test Service
https://01.org/lkp
Powered by blists - more mailing lists