CC: [email protected] CC: [email protected] BCC: [email protected] CC: Johannes Berg <[email protected]> CC: Kalle Valo <[email protected]> CC: [email protected] TO: Johannes Berg <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git mld head: 418110601b1711438b8c80cd605d7c65afb3bf40 commit: d45ac277fe08deaedc9966155a40eafb09e1b6fe [4/7] cfg80211: do some rework towards MLO link APIs :::::: branch date: 2 days ago :::::: commit date: 2 days ago config: arm-randconfig-c002-20220522 (https://download.01.org/0day-ci/archive/20220523/[email protected]/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 1443dbaba6f0e57be066995db9164f89fb57b413) 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/wireless/wireless-next.git/commit/?id=d45ac277fe08deaedc9966155a40eafb09e1b6fe git remote add wireless-next https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git git fetch --no-tags wireless-next mld git checkout d45ac277fe08deaedc9966155a40eafb09e1b6fe # save the config file COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm clang-analyzer If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <[email protected]> clang-analyzer warnings: (new ones prefixed by >>) ^ mm/slab.h:804:9: note: expanded from macro 'for_each_kmem_cache_node' if ((__n = get_node(__s, __node))) ^~~ mm/slub.c:4306:2: note: Taking true branch for_each_kmem_cache_node(s, node, n) { ^ mm/slab.h:804:4: note: expanded from macro 'for_each_kmem_cache_node' if ((__n = get_node(__s, __node))) ^ mm/slub.c:4307:3: note: Calling 'free_partial' free_partial(s, n); ^~~~~~~~~~~~~~~~~~ mm/slub.c:4268:9: note: Loop condition is false. Exiting loop BUG_ON(irqs_disabled()); ^ include/linux/irqflags.h:261:3: note: expanded from macro 'irqs_disabled' raw_local_save_flags(_flags); \ ^ include/linux/irqflags.h:187:2: note: expanded from macro 'raw_local_save_flags' do { \ ^ mm/slub.c:4268:2: note: Assuming the condition is true BUG_ON(irqs_disabled()); ^ include/asm-generic/bug.h:71:36: note: expanded from macro 'BUG_ON' #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0) ^~~~~~~~~~~~~~~~~~~ include/linux/compiler.h:78:40: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^~~~ mm/slub.c:4268:2: note: Taking false branch BUG_ON(irqs_disabled()); ^ include/asm-generic/bug.h:71:32: note: expanded from macro 'BUG_ON' #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0) ^ mm/slub.c:4268:2: note: Loop condition is false. Exiting loop BUG_ON(irqs_disabled()); ^ include/asm-generic/bug.h:71:27: note: expanded from macro 'BUG_ON' #define BUG_ON(condition) do { if (unlikely(condition)) BUG(); } while (0) ^ mm/slub.c:4270:2: note: Loop condition is false. Execution continues on line 4279 list_for_each_entry_safe(slab, h, &n->partial, slab_list) { ^ include/linux/list.h:751:2: note: expanded from macro 'list_for_each_entry_safe' for (pos = list_first_entry(head, typeof(*pos), member), \ ^ mm/slub.c:4281:2: note: Assigned value is garbage or undefined list_for_each_entry_safe(slab, h, &discard, slab_list) ^ include/linux/list.h:752:7: note: expanded from macro 'list_for_each_entry_safe' n = list_next_entry(pos, member); \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:564:2: note: expanded from macro 'list_next_entry' list_entry((pos)->member.next, typeof(*(pos)), member) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:520:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/container_of.h:18:2: note: expanded from macro 'container_of' void *__mptr = (void *)(ptr); \ ^ ~~~~~~~~~~~~~ mm/slub.c:4771:2: warning: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling] memcpy(s, static_cache, kmem_cache->object_size); ^~~~~~ mm/slub.c:4771:2: note: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 memcpy(s, static_cache, kmem_cache->object_size); ^~~~~~ mm/slub.c:5099:3: warning: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling] memcpy(l, t->loc, sizeof(struct location) * t->count); ^~~~~~ mm/slub.c:5099:3: note: Call to function 'memcpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memcpy_s' in case of C11 memcpy(l, t->loc, sizeof(struct location) * t->count); ^~~~~~ mm/slub.c:5166:3: warning: Call to function 'memmove' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memmove_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling] memmove(l + 1, l, ^~~~~~~ mm/slub.c:5166:3: note: Call to function 'memmove' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memmove_s' in case of C11 memmove(l + 1, l, ^~~~~~~ mm/slub.c:5898:7: warning: Call to function 'sprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'sprintf_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling] p += sprintf(p, "%07u", s->size); ^~~~~~~ mm/slub.c:5898:7: note: Call to function 'sprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'sprintf_s' in case of C11 p += sprintf(p, "%07u", s->size); ^~~~~~~ Suppressed 45 warnings (43 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. 15 warnings generated. Suppressed 15 warnings (15 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. 66 warnings generated. net/wireless/ap.c:37:3: warning: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling] memset(&wdev->links[link_id].ap.chandef, 0, ^~~~~~ net/wireless/ap.c:37:3: note: Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11 memset(&wdev->links[link_id].ap.chandef, 0, ^~~~~~ >> net/wireless/ap.c:73:2: warning: Undefined or garbage value returned to >> caller [clang-analyzer-core.uninitialized.UndefReturn] return ret; ^ net/wireless/ap.c:84:8: note: Calling '__cfg80211_stop_ap' err = __cfg80211_stop_ap(rdev, dev, link_id, notify); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net/wireless/ap.c:60:2: note: 'ret' declared without an initial value int ret; ^~~~~~~ net/wireless/ap.c:62:6: note: Assuming 'link_id' is < 0 if (link_id >= 0) ^~~~~~~~~~~~ net/wireless/ap.c:62:2: note: Taking false branch if (link_id >= 0) ^ net/wireless/ap.c:65:2: note: Assuming field 'valid_links' is 0 for_each_valid_link(dev->ieee80211_ptr, link) { ^ include/net/cfg80211.h:5742:18: note: expanded from macro 'for_each_valid_link' link_id < ((wdev)->valid_links ? ARRAY_SIZE((wdev)->links) : 1); \ ^~~~~~~~~~~~~~~~~~~ net/wireless/ap.c:65:2: note: '?' condition is false for_each_valid_link(dev->ieee80211_ptr, link) { ^ include/net/cfg80211.h:5742:18: note: expanded from macro 'for_each_valid_link' link_id < ((wdev)->valid_links ? ARRAY_SIZE((wdev)->links) : 1); \ ^ net/wireless/ap.c:65:2: note: Loop condition is true. Entering loop body for_each_valid_link(dev->ieee80211_ptr, link) { ^ include/net/cfg80211.h:5741:2: note: expanded from macro 'for_each_valid_link' for (link_id = 0; \ ^ net/wireless/ap.c:65:2: note: Field 'valid_links' is 0 for_each_valid_link(dev->ieee80211_ptr, link) { ^ include/net/cfg80211.h:5744:16: note: expanded from macro 'for_each_valid_link' if (!(wdev)->valid_links || \ ^ net/wireless/ap.c:65:2: note: Left side of '||' is true for_each_valid_link(dev->ieee80211_ptr, link) { ^ include/net/cfg80211.h:5744:28: note: expanded from macro 'for_each_valid_link' if (!(wdev)->valid_links || \ ^ net/wireless/ap.c:68:7: note: 'ret1' is 0 if (ret1) ^~~~ net/wireless/ap.c:68:3: note: Taking false branch if (ret1) ^ net/wireless/ap.c:65:2: note: Assuming field 'valid_links' is 0 for_each_valid_link(dev->ieee80211_ptr, link) { ^ include/net/cfg80211.h:5742:18: note: expanded from macro 'for_each_valid_link' link_id < ((wdev)->valid_links ? ARRAY_SIZE((wdev)->links) : 1); \ ^~~~~~~~~~~~~~~~~~~ net/wireless/ap.c:65:2: note: '?' condition is false for_each_valid_link(dev->ieee80211_ptr, link) { ^ include/net/cfg80211.h:5742:18: note: expanded from macro 'for_each_valid_link' link_id < ((wdev)->valid_links ? ARRAY_SIZE((wdev)->links) : 1); \ ^ net/wireless/ap.c:65:2: note: Loop condition is false. Execution continues on line 73 for_each_valid_link(dev->ieee80211_ptr, link) { ^ include/net/cfg80211.h:5741:2: note: expanded from macro 'for_each_valid_link' for (link_id = 0; \ ^ net/wireless/ap.c:73:2: note: Undefined or garbage value returned to caller return ret; ^ ~~~ Suppressed 64 warnings (64 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. 24 warnings generated. drivers/hwmon/lm75.h:30:29: warning: The result of the left shift is undefined because the left operand is negative [clang-analyzer-core.UndefinedBinaryOperatorResult] return (u16)((ntemp / 500) << 7); ^ drivers/hwmon/w83627ehf.c:1608:6: note: Assuming 'type' is not equal to hwmon_in if (type == hwmon_in && attr == hwmon_in_min) ^~~~~~~~~~~~~~~~ drivers/hwmon/w83627ehf.c:1608:23: note: Left side of '&&' is false if (type == hwmon_in && attr == hwmon_in_min) ^ drivers/hwmon/w83627ehf.c:1610:6: note: 'type' is not equal to hwmon_in if (type == hwmon_in && attr == hwmon_in_max) ^~~~ drivers/hwmon/w83627ehf.c:1610:23: note: Left side of '&&' is false if (type == hwmon_in && attr == hwmon_in_max) ^ drivers/hwmon/w83627ehf.c:1613:6: note: Assuming 'type' is not equal to hwmon_fan if (type == hwmon_fan && attr == hwmon_fan_min) ^~~~~~~~~~~~~~~~~ drivers/hwmon/w83627ehf.c:1613:24: note: Left side of '&&' is false if (type == hwmon_fan && attr == hwmon_fan_min) ^ drivers/hwmon/w83627ehf.c:1616:6: note: Assuming 'type' is equal to hwmon_temp if (type == hwmon_temp && attr == hwmon_temp_max) ^~~~~~~~~~~~~~~~~~ drivers/hwmon/w83627ehf.c:1616:6: note: Left side of '&&' is true drivers/hwmon/w83627ehf.c:1616:28: note: Assuming 'attr' is equal to hwmon_temp_max vim +73 net/wireless/ap.c 60771780c27cbc Michal Kazior 2012-06-29 12 60771780c27cbc Michal Kazior 2012-06-29 13 d45ac277fe08de Johannes Berg 2022-04-14 14 static int ___cfg80211_stop_ap(struct cfg80211_registered_device *rdev, d45ac277fe08de Johannes Berg 2022-04-14 15 struct net_device *dev, unsigned int link_id, d45ac277fe08de Johannes Berg 2022-04-14 16 bool notify) 60771780c27cbc Michal Kazior 2012-06-29 17 { 60771780c27cbc Michal Kazior 2012-06-29 18 struct wireless_dev *wdev = dev->ieee80211_ptr; 60771780c27cbc Michal Kazior 2012-06-29 19 int err; 60771780c27cbc Michal Kazior 2012-06-29 20 60771780c27cbc Michal Kazior 2012-06-29 21 ASSERT_WDEV_LOCK(wdev); 60771780c27cbc Michal Kazior 2012-06-29 22 60771780c27cbc Michal Kazior 2012-06-29 23 if (!rdev->ops->stop_ap) 60771780c27cbc Michal Kazior 2012-06-29 24 return -EOPNOTSUPP; 60771780c27cbc Michal Kazior 2012-06-29 25 60771780c27cbc Michal Kazior 2012-06-29 26 if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP && 60771780c27cbc Michal Kazior 2012-06-29 27 dev->ieee80211_ptr->iftype != NL80211_IFTYPE_P2P_GO) 60771780c27cbc Michal Kazior 2012-06-29 28 return -EOPNOTSUPP; 60771780c27cbc Michal Kazior 2012-06-29 29 d45ac277fe08de Johannes Berg 2022-04-14 30 if (!wdev->links[link_id].ap.beacon_interval) 60771780c27cbc Michal Kazior 2012-06-29 31 return -ENOENT; 60771780c27cbc Michal Kazior 2012-06-29 32 d45ac277fe08de Johannes Berg 2022-04-14 33 err = rdev_stop_ap(rdev, dev, link_id); f4489ebeffa436 Michal Kazior 2012-06-29 34 if (!err) { 466a306142c002 Denis Kenzior 2018-03-26 35 wdev->conn_owner_nlportid = 0; d45ac277fe08de Johannes Berg 2022-04-14 36 wdev->links[link_id].ap.beacon_interval = 0; d45ac277fe08de Johannes Berg 2022-04-14 @37 memset(&wdev->links[link_id].ap.chandef, 0, d45ac277fe08de Johannes Berg 2022-04-14 38 sizeof(wdev->links[link_id].ap.chandef)); d45ac277fe08de Johannes Berg 2022-04-14 39 wdev->u.ap.ssid_len = 0; fa9ffc745610f3 Kyeyoon Park 2013-12-16 40 rdev_set_qos_map(rdev, dev, NULL); 7c8d5e03acc680 Ilan Peer 2014-02-25 41 if (notify) 348baf0eac3391 Johannes Berg 2014-01-24 42 nl80211_send_ap_stopped(wdev); b35a51c7dd25a8 Vasanthakumar Thiagarajan 2017-02-27 43 b35a51c7dd25a8 Vasanthakumar Thiagarajan 2017-02-27 44 /* Should we apply the grace period during beaconing interface b35a51c7dd25a8 Vasanthakumar Thiagarajan 2017-02-27 45 * shutdown also? b35a51c7dd25a8 Vasanthakumar Thiagarajan 2017-02-27 46 */ b35a51c7dd25a8 Vasanthakumar Thiagarajan 2017-02-27 47 cfg80211_sched_dfs_chan_update(rdev); f4489ebeffa436 Michal Kazior 2012-06-29 48 } 60771780c27cbc Michal Kazior 2012-06-29 49 e005bd7ddea067 Johannes Berg 2019-02-01 50 schedule_work(&cfg80211_disconnect_work); e005bd7ddea067 Johannes Berg 2019-02-01 51 60771780c27cbc Michal Kazior 2012-06-29 52 return err; 60771780c27cbc Michal Kazior 2012-06-29 53 } 60771780c27cbc Michal Kazior 2012-06-29 54 d45ac277fe08de Johannes Berg 2022-04-14 55 int __cfg80211_stop_ap(struct cfg80211_registered_device *rdev, d45ac277fe08de Johannes Berg 2022-04-14 56 struct net_device *dev, int link_id, d45ac277fe08de Johannes Berg 2022-04-14 57 bool notify) d45ac277fe08de Johannes Berg 2022-04-14 58 { d45ac277fe08de Johannes Berg 2022-04-14 59 unsigned int link; d45ac277fe08de Johannes Berg 2022-04-14 60 int ret; d45ac277fe08de Johannes Berg 2022-04-14 61 d45ac277fe08de Johannes Berg 2022-04-14 62 if (link_id >= 0) d45ac277fe08de Johannes Berg 2022-04-14 63 return ___cfg80211_stop_ap(rdev, dev, link_id, notify); d45ac277fe08de Johannes Berg 2022-04-14 64 d45ac277fe08de Johannes Berg 2022-04-14 65 for_each_valid_link(dev->ieee80211_ptr, link) { d45ac277fe08de Johannes Berg 2022-04-14 66 int ret1 = ___cfg80211_stop_ap(rdev, dev, link, notify); d45ac277fe08de Johannes Berg 2022-04-14 67 d45ac277fe08de Johannes Berg 2022-04-14 68 if (ret1) d45ac277fe08de Johannes Berg 2022-04-14 69 ret = ret1; d45ac277fe08de Johannes Berg 2022-04-14 70 /* try the next one also if one errored */ d45ac277fe08de Johannes Berg 2022-04-14 71 } d45ac277fe08de Johannes Berg 2022-04-14 72 d45ac277fe08de Johannes Berg 2022-04-14 @73 return ret; d45ac277fe08de Johannes Berg 2022-04-14 74 } d45ac277fe08de Johannes Berg 2022-04-14 75 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
