CC: llvm(a)lists.linux.dev CC: kbuild-all(a)lists.01.org BCC: lkp(a)intel.com CC: linux-kernel(a)vger.kernel.org TO: Loic Poulain tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: a2c29ccd9477861b16ddc02c411a6c9665250558 commit: 89212e160b81e778f829b89743570665810e3b13 net: wwan: Fix WWAN config symbols date: 10 months ago :::::: branch date: 9 hours ago :::::: commit date: 10 months ago config: arm-randconfig-c002-20220417 (https://download.01.org/0day-ci/archive/20220417/202204171651.3XFL5mUb-lkp(a)intel.com/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 64c045e25b8471bbb572bd29159c294a82a86a25) 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 arm cross compiling tool for clang build # apt-get install binutils-arm-linux-gnueabi # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=89212e160b81e778f829b89743570665810e3b13 git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git fetch --no-tags linus master git checkout 89212e160b81e778f829b89743570665810e3b13 # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot clang-analyzer warnings: (new ones prefixed by >>) ^ include/linux/list.h:511:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) ^ include/linux/kernel.h:716:2: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/compiler_types.h:328:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:316:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:308:3: note: expanded from macro '__compiletime_assert' if (!(condition)) \ ^ drivers/media/cec/core/cec-api.c:677:4: note: Loop condition is false. Exiting loop list_first_entry(&fh->msgs, struct cec_msg_entry, list); ^ include/linux/list.h:522:2: note: expanded from macro 'list_first_entry' list_entry((ptr)->next, type, member) ^ include/linux/list.h:511:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) ^ include/linux/kernel.h:716:2: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/compiler_types.h:328:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:316:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:306:2: note: expanded from macro '__compiletime_assert' do { \ ^ drivers/media/cec/core/cec-api.c:679:3: note: Calling 'list_del' list_del(&entry->list); ^~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:147:14: note: Use of memory after it is freed entry->next = LIST_POISON1; ~~~~~~~~~~~ ^ Suppressed 1 warnings (1 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. drivers/fsi/fsi-core.c:719:4: warning: Value stored to 'rc' is never read [clang-analyzer-deadcode.DeadStores] rc = -EFAULT; ^ ~~~~~~~ drivers/fsi/fsi-core.c:719:4: note: Value stored to 'rc' is never read rc = -EFAULT; ^ ~~~~~~~ drivers/fsi/fsi-core.c:724:2: warning: Value stored to 'rc' is never read [clang-analyzer-deadcode.DeadStores] rc = count; ^ ~~~~~ drivers/fsi/fsi-core.c:724:2: note: Value stored to 'rc' is never read rc = count; ^ ~~~~~ drivers/fsi/fsi-core.c:753:4: warning: Value stored to 'rc' is never read [clang-analyzer-deadcode.DeadStores] rc = -EFAULT; ^ ~~~~~~~ drivers/fsi/fsi-core.c:753:4: note: Value stored to 'rc' is never read rc = -EFAULT; ^ ~~~~~~~ drivers/fsi/fsi-core.c:761:2: warning: Value stored to 'rc' is never read [clang-analyzer-deadcode.DeadStores] rc = count; ^ ~~~~~ drivers/fsi/fsi-core.c:761:2: note: Value stored to 'rc' is never read rc = count; ^ ~~~~~ 2 warnings generated. Suppressed 2 warnings (1 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 (1 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 (1 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 (1 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 (1 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 (1 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 (1 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 (1 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 (1 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. >> drivers/net/wwan/wwan_hwsim.c:286:3: warning: Use of memory after it is freed [clang-analyzer-unix.Malloc] wwan_hwsim_port_del(port); ^ drivers/net/wwan/wwan_hwsim.c:489:2: note: Calling 'wwan_hwsim_free_devs' wwan_hwsim_free_devs(); ^~~~~~~~~~~~~~~~~~~~~~ drivers/net/wwan/wwan_hwsim.c:444:2: note: Loop condition is true. Entering loop body while (!list_empty(&wwan_hwsim_devs)) { ^ drivers/net/wwan/wwan_hwsim.c:445:9: note: Left side of '&&' is false dev = list_first_entry(&wwan_hwsim_devs, struct wwan_hwsim_dev, ^ include/linux/list.h:522:2: note: expanded from macro 'list_first_entry' list_entry((ptr)->next, type, member) ^ include/linux/list.h:511:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) ^ include/linux/kernel.h:716:61: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ drivers/net/wwan/wwan_hwsim.c:445:9: note: Taking false branch dev = list_first_entry(&wwan_hwsim_devs, struct wwan_hwsim_dev, ^ include/linux/list.h:522:2: note: expanded from macro 'list_first_entry' list_entry((ptr)->next, type, member) ^ include/linux/list.h:511:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) ^ include/linux/kernel.h:716:2: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/compiler_types.h:328:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:316:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:308:3: note: expanded from macro '__compiletime_assert' if (!(condition)) \ ^ drivers/net/wwan/wwan_hwsim.c:445:9: note: Loop condition is false. Exiting loop dev = list_first_entry(&wwan_hwsim_devs, struct wwan_hwsim_dev, ^ include/linux/list.h:522:2: note: expanded from macro 'list_first_entry' list_entry((ptr)->next, type, member) ^ include/linux/list.h:511:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) ^ include/linux/kernel.h:716:2: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/compiler_types.h:328:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:316:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:306:2: note: expanded from macro '__compiletime_assert' do { \ ^ drivers/net/wwan/wwan_hwsim.c:449:3: note: Calling 'wwan_hwsim_dev_del' wwan_hwsim_dev_del(dev); ^~~~~~~~~~~~~~~~~~~~~~~ drivers/net/wwan/wwan_hwsim.c:279:2: note: Loop condition is true. Entering loop body while (!list_empty(&dev->ports)) { ^ drivers/net/wwan/wwan_hwsim.c:282:10: note: Left side of '&&' is false port = list_first_entry(&dev->ports, struct wwan_hwsim_port, ^ include/linux/list.h:522:2: note: expanded from macro 'list_first_entry' list_entry((ptr)->next, type, member) ^ include/linux/list.h:511:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) ^ include/linux/kernel.h:716:61: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ drivers/net/wwan/wwan_hwsim.c:282:10: note: Taking false branch port = list_first_entry(&dev->ports, struct wwan_hwsim_port, ^ include/linux/list.h:522:2: note: expanded from macro 'list_first_entry' list_entry((ptr)->next, type, member) ^ include/linux/list.h:511:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) ^ include/linux/kernel.h:716:2: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ note: (skipping 1 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/compiler_types.h:328:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:316:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) vim +286 drivers/net/wwan/wwan_hwsim.c f36a111a74e71ed Sergey Ryazanov 2021-06-08 273 f36a111a74e71ed Sergey Ryazanov 2021-06-08 274 static void wwan_hwsim_dev_del(struct wwan_hwsim_dev *dev) f36a111a74e71ed Sergey Ryazanov 2021-06-08 275 { 9ee23f48f6705ff Sergey Ryazanov 2021-06-08 276 debugfs_remove(dev->debugfs_portcreate); /* Avoid new ports */ 9ee23f48f6705ff Sergey Ryazanov 2021-06-08 277 f36a111a74e71ed Sergey Ryazanov 2021-06-08 278 spin_lock(&dev->ports_lock); f36a111a74e71ed Sergey Ryazanov 2021-06-08 279 while (!list_empty(&dev->ports)) { f36a111a74e71ed Sergey Ryazanov 2021-06-08 280 struct wwan_hwsim_port *port; f36a111a74e71ed Sergey Ryazanov 2021-06-08 281 f36a111a74e71ed Sergey Ryazanov 2021-06-08 282 port = list_first_entry(&dev->ports, struct wwan_hwsim_port, f36a111a74e71ed Sergey Ryazanov 2021-06-08 283 list); 9ee23f48f6705ff Sergey Ryazanov 2021-06-08 284 list_del_init(&port->list); f36a111a74e71ed Sergey Ryazanov 2021-06-08 285 spin_unlock(&dev->ports_lock); f36a111a74e71ed Sergey Ryazanov 2021-06-08 @286 wwan_hwsim_port_del(port); f36a111a74e71ed Sergey Ryazanov 2021-06-08 287 spin_lock(&dev->ports_lock); f36a111a74e71ed Sergey Ryazanov 2021-06-08 288 } f36a111a74e71ed Sergey Ryazanov 2021-06-08 289 spin_unlock(&dev->ports_lock); f36a111a74e71ed Sergey Ryazanov 2021-06-08 290 9ee23f48f6705ff Sergey Ryazanov 2021-06-08 291 debugfs_remove(dev->debugfs_topdir); 9ee23f48f6705ff Sergey Ryazanov 2021-06-08 292 9ee23f48f6705ff Sergey Ryazanov 2021-06-08 293 /* Make sure that there is no pending deletion work */ 9ee23f48f6705ff Sergey Ryazanov 2021-06-08 294 if (current_work() != &dev->del_work) 9ee23f48f6705ff Sergey Ryazanov 2021-06-08 295 cancel_work_sync(&dev->del_work); 9ee23f48f6705ff Sergey Ryazanov 2021-06-08 296 f36a111a74e71ed Sergey Ryazanov 2021-06-08 297 device_unregister(&dev->dev); f36a111a74e71ed Sergey Ryazanov 2021-06-08 298 /* Memory will be freed in the device release callback */ f36a111a74e71ed Sergey Ryazanov 2021-06-08 299 } f36a111a74e71ed Sergey Ryazanov 2021-06-08 300 :::::: The code at line 286 was first introduced by commit :::::: f36a111a74e71edbba27d4c0cf3d7bbccc172108 wwan_hwsim: WWAN device simulator :::::: TO: Sergey Ryazanov :::::: CC: David S. Miller -- 0-DAY CI Kernel Test Service https://01.org/lkp