Message ID | ZrZs5KL5Pz9tIinr@cute (mailing list archive) |
---|---|
State | New |
Delegated to: | Miri Korenblit |
Headers | show |
Series | [v2,next] wifi: iwlwifi: mvm: Use __counted_by() and avoid -Wfamnae warnings | expand |
Hi Gustavo, kernel test robot noticed the following build errors: [auto build test ERROR on wireless-next/main] [also build test ERROR on wireless/main linus/master v6.11-rc2 next-20240809] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Gustavo-A-R-Silva/wifi-iwlwifi-mvm-Use-__counted_by-and-avoid-Wfamnae-warnings/20240810-103759 base: https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git main patch link: https://lore.kernel.org/r/ZrZs5KL5Pz9tIinr%40cute patch subject: [PATCH v2][next] wifi: iwlwifi: mvm: Use __counted_by() and avoid -Wfamnae warnings config: sparc-allmodconfig (https://download.01.org/0day-ci/archive/20240811/202408110304.CRXk8u09-lkp@intel.com/config) compiler: sparc64-linux-gcc (GCC) 14.1.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240811/202408110304.CRXk8u09-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202408110304.CRXk8u09-lkp@intel.com/ All errors (new ones prefixed by >>): In file included from <command-line>: drivers/net/wireless/intel/iwlwifi/mvm/d3.c: In function 'iwl_mvm_gtk_rekey': >> include/linux/compiler_types.h:510:45: error: call to '__compiletime_assert_821' declared with attribute error: BUILD_BUG_ON failed: conf->keylen < WLAN_KEY_LEN_CCMP 510 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) | ^ include/linux/compiler_types.h:491:25: note: in definition of macro '__compiletime_assert' 491 | prefix ## suffix(); \ | ^~~~~~ include/linux/compiler_types.h:510:9: note: in expansion of macro '_compiletime_assert' 510 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) | ^~~~~~~~~~~~~~~~~~~ include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert' 39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) | ^~~~~~~~~~~~~~~~~~ include/linux/build_bug.h:50:9: note: in expansion of macro 'BUILD_BUG_ON_MSG' 50 | BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition) | ^~~~~~~~~~~~~~~~ drivers/net/wireless/intel/iwlwifi/mvm/d3.c:2148:9: note: in expansion of macro 'BUILD_BUG_ON' 2148 | BUILD_BUG_ON(conf->keylen < WLAN_KEY_LEN_CCMP); | ^~~~~~~~~~~~ >> include/linux/compiler_types.h:510:45: error: call to '__compiletime_assert_822' declared with attribute error: BUILD_BUG_ON failed: conf->keylen < WLAN_KEY_LEN_GCMP_256 510 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) | ^ include/linux/compiler_types.h:491:25: note: in definition of macro '__compiletime_assert' 491 | prefix ## suffix(); \ | ^~~~~~ include/linux/compiler_types.h:510:9: note: in expansion of macro '_compiletime_assert' 510 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) | ^~~~~~~~~~~~~~~~~~~ include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert' 39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) | ^~~~~~~~~~~~~~~~~~ include/linux/build_bug.h:50:9: note: in expansion of macro 'BUILD_BUG_ON_MSG' 50 | BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition) | ^~~~~~~~~~~~~~~~ drivers/net/wireless/intel/iwlwifi/mvm/d3.c:2149:9: note: in expansion of macro 'BUILD_BUG_ON' 2149 | BUILD_BUG_ON(conf->keylen < WLAN_KEY_LEN_GCMP_256); | ^~~~~~~~~~~~ vim +/__compiletime_assert_821 +510 include/linux/compiler_types.h eb5c2d4b45e3d2 Will Deacon 2020-07-21 496 eb5c2d4b45e3d2 Will Deacon 2020-07-21 497 #define _compiletime_assert(condition, msg, prefix, suffix) \ eb5c2d4b45e3d2 Will Deacon 2020-07-21 498 __compiletime_assert(condition, msg, prefix, suffix) eb5c2d4b45e3d2 Will Deacon 2020-07-21 499 eb5c2d4b45e3d2 Will Deacon 2020-07-21 500 /** eb5c2d4b45e3d2 Will Deacon 2020-07-21 501 * compiletime_assert - break build and emit msg if condition is false eb5c2d4b45e3d2 Will Deacon 2020-07-21 502 * @condition: a compile-time constant condition to check eb5c2d4b45e3d2 Will Deacon 2020-07-21 503 * @msg: a message to emit if condition is false eb5c2d4b45e3d2 Will Deacon 2020-07-21 504 * eb5c2d4b45e3d2 Will Deacon 2020-07-21 505 * In tradition of POSIX assert, this macro will break the build if the eb5c2d4b45e3d2 Will Deacon 2020-07-21 506 * supplied condition is *false*, emitting the supplied error message if the eb5c2d4b45e3d2 Will Deacon 2020-07-21 507 * compiler has support to do so. eb5c2d4b45e3d2 Will Deacon 2020-07-21 508 */ eb5c2d4b45e3d2 Will Deacon 2020-07-21 509 #define compiletime_assert(condition, msg) \ eb5c2d4b45e3d2 Will Deacon 2020-07-21 @510 _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) eb5c2d4b45e3d2 Will Deacon 2020-07-21 511
Hi Gustavo, kernel test robot noticed the following build errors: [auto build test ERROR on wireless-next/main] [also build test ERROR on wireless/main linus/master v6.11-rc2 next-20240809] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Gustavo-A-R-Silva/wifi-iwlwifi-mvm-Use-__counted_by-and-avoid-Wfamnae-warnings/20240810-103759 base: https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git main patch link: https://lore.kernel.org/r/ZrZs5KL5Pz9tIinr%40cute patch subject: [PATCH v2][next] wifi: iwlwifi: mvm: Use __counted_by() and avoid -Wfamnae warnings config: riscv-allmodconfig (https://download.01.org/0day-ci/archive/20240811/202408110634.V68RFEtW-lkp@intel.com/config) compiler: clang version 20.0.0git (https://github.com/llvm/llvm-project f86594788ce93b696675c94f54016d27a6c21d18) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240811/202408110634.V68RFEtW-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202408110634.V68RFEtW-lkp@intel.com/ All errors (new ones prefixed by >>): In file included from drivers/net/wireless/intel/iwlwifi/mvm/d3.c:7: In file included from include/linux/etherdevice.h:20: In file included from include/linux/if_ether.h:19: In file included from include/linux/skbuff.h:17: In file included from include/linux/bvec.h:10: In file included from include/linux/highmem.h:8: In file included from include/linux/cacheflush.h:5: In file included from arch/riscv/include/asm/cacheflush.h:9: In file included from include/linux/mm.h:2228: include/linux/vmstat.h:500:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion] 500 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~ ^ 501 | item]; | ~~~~ include/linux/vmstat.h:507:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion] 507 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~ ^ 508 | NR_VM_NUMA_EVENT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~~ include/linux/vmstat.h:514:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion] 514 | return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_" | ~~~~~~~~~~~ ^ ~~~ include/linux/vmstat.h:519:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion] 519 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~ ^ 520 | NR_VM_NUMA_EVENT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~~ include/linux/vmstat.h:528:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion] 528 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~ ^ 529 | NR_VM_NUMA_EVENT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~~ >> drivers/net/wireless/intel/iwlwifi/mvm/d3.c:2149:2: error: call to '__compiletime_assert_1044' declared with 'error' attribute: BUILD_BUG_ON failed: conf->keylen < WLAN_KEY_LEN_GCMP_256 2149 | BUILD_BUG_ON(conf->keylen < WLAN_KEY_LEN_GCMP_256); | ^ include/linux/build_bug.h:50:2: note: expanded from macro 'BUILD_BUG_ON' 50 | BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition) | ^ include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG' 39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) | ^ include/linux/compiler_types.h:510:2: note: expanded from macro 'compiletime_assert' 510 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) | ^ include/linux/compiler_types.h:498:2: note: expanded from macro '_compiletime_assert' 498 | __compiletime_assert(condition, msg, prefix, suffix) | ^ include/linux/compiler_types.h:491:4: note: expanded from macro '__compiletime_assert' 491 | prefix ## suffix(); \ | ^ <scratch space>:38:1: note: expanded from here 38 | __compiletime_assert_1044 | ^ >> drivers/net/wireless/intel/iwlwifi/mvm/d3.c:2148:2: error: call to '__compiletime_assert_1043' declared with 'error' attribute: BUILD_BUG_ON failed: conf->keylen < WLAN_KEY_LEN_CCMP 2148 | BUILD_BUG_ON(conf->keylen < WLAN_KEY_LEN_CCMP); | ^ include/linux/build_bug.h:50:2: note: expanded from macro 'BUILD_BUG_ON' 50 | BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition) | ^ include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG' 39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) | ^ include/linux/compiler_types.h:510:2: note: expanded from macro 'compiletime_assert' 510 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) | ^ include/linux/compiler_types.h:498:2: note: expanded from macro '_compiletime_assert' 498 | __compiletime_assert(condition, msg, prefix, suffix) | ^ include/linux/compiler_types.h:491:4: note: expanded from macro '__compiletime_assert' 491 | prefix ## suffix(); \ | ^ <scratch space>:34:1: note: expanded from here 34 | __compiletime_assert_1043 | ^ 5 warnings and 2 errors generated. vim +2149 drivers/net/wireless/intel/iwlwifi/mvm/d3.c 2134 2135 static bool iwl_mvm_gtk_rekey(struct iwl_wowlan_status_data *status, 2136 struct ieee80211_vif *vif, 2137 struct iwl_mvm *mvm, u32 gtk_cipher) 2138 { 2139 int i, j; 2140 struct ieee80211_key_conf *key; 2141 DEFINE_FLEX(struct ieee80211_key_conf, conf, key, keylen, 2142 WOWLAN_KEY_MAX_SIZE); 2143 int link_id = vif->active_links ? __ffs(vif->active_links) : -1; 2144 2145 conf->cipher = gtk_cipher; 2146 2147 BUILD_BUG_ON(WLAN_KEY_LEN_CCMP != WLAN_KEY_LEN_GCMP); > 2148 BUILD_BUG_ON(conf->keylen < WLAN_KEY_LEN_CCMP); > 2149 BUILD_BUG_ON(conf->keylen < WLAN_KEY_LEN_GCMP_256); 2150 BUILD_BUG_ON(conf->keylen < WLAN_KEY_LEN_TKIP); 2151 BUILD_BUG_ON(conf->keylen < sizeof(status->gtk[0].key)); 2152 2153 switch (gtk_cipher) { 2154 case WLAN_CIPHER_SUITE_CCMP: 2155 case WLAN_CIPHER_SUITE_GCMP: 2156 conf->keylen = WLAN_KEY_LEN_CCMP; 2157 break; 2158 case WLAN_CIPHER_SUITE_GCMP_256: 2159 conf->keylen = WLAN_KEY_LEN_GCMP_256; 2160 break; 2161 case WLAN_CIPHER_SUITE_TKIP: 2162 conf->keylen = WLAN_KEY_LEN_TKIP; 2163 break; 2164 default: 2165 WARN_ON(1); 2166 } 2167 2168 for (i = 0; i < ARRAY_SIZE(status->gtk); i++) { 2169 if (!status->gtk[i].len) 2170 continue; 2171 2172 conf->keyidx = status->gtk[i].id; 2173 IWL_DEBUG_WOWLAN(mvm, 2174 "Received from FW GTK cipher %d, key index %d\n", 2175 conf->cipher, conf->keyidx); 2176 memcpy(conf->key, status->gtk[i].key, 2177 sizeof(status->gtk[i].key)); 2178 2179 key = ieee80211_gtk_rekey_add(vif, conf, link_id); 2180 if (IS_ERR(key)) 2181 return false; 2182 2183 for (j = 0; j < ARRAY_SIZE(status->gtk_seq); j++) { 2184 if (!status->gtk_seq[j].valid || 2185 status->gtk_seq[j].key_id != key->keyidx) 2186 continue; 2187 iwl_mvm_set_key_rx_seq_idx(key, status, j); 2188 break; 2189 } 2190 WARN_ON(j == ARRAY_SIZE(status->gtk_seq)); 2191 } 2192 2193 return true; 2194 } 2195
On 10/08/24 22:26, kernel test robot wrote: > Hi Gustavo, > > kernel test robot noticed the following build errors: > > [auto build test ERROR on wireless-next/main] > [also build test ERROR on wireless/main linus/master v6.11-rc2 next-20240809] > [If your patch is applied to the wrong git tree, kindly drop us a note. > And when submitting patch, we suggest to use '--base' as documented in > https://git-scm.com/docs/git-format-patch#_base_tree_information] > > url: https://github.com/intel-lab-lkp/linux/commits/Gustavo-A-R-Silva/wifi-iwlwifi-mvm-Use-__counted_by-and-avoid-Wfamnae-warnings/20240810-103759 > base: https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git main > patch link: https://lore.kernel.org/r/ZrZs5KL5Pz9tIinr%40cute > patch subject: [PATCH v2][next] wifi: iwlwifi: mvm: Use __counted_by() and avoid -Wfamnae warnings > config: riscv-allmodconfig (https://download.01.org/0day-ci/archive/20240811/202408110634.V68RFEtW-lkp@intel.com/config) > compiler: clang version 20.0.0git (https://github.com/llvm/llvm-project f86594788ce93b696675c94f54016d27a6c21d18) > reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240811/202408110634.V68RFEtW-lkp@intel.com/reproduce) > > If you fix the issue in a separate patch/commit (i.e. not just a new version of > the same patch/commit), kindly add following tags > | Reported-by: kernel test robot <lkp@intel.com> > | Closes: https://lore.kernel.org/oe-kbuild-all/202408110634.V68RFEtW-lkp@intel.com/ > > All errors (new ones prefixed by >>): > > In file included from drivers/net/wireless/intel/iwlwifi/mvm/d3.c:7: > In file included from include/linux/etherdevice.h:20: > In file included from include/linux/if_ether.h:19: > In file included from include/linux/skbuff.h:17: > In file included from include/linux/bvec.h:10: > In file included from include/linux/highmem.h:8: > In file included from include/linux/cacheflush.h:5: > In file included from arch/riscv/include/asm/cacheflush.h:9: > In file included from include/linux/mm.h:2228: > include/linux/vmstat.h:500:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion] > 500 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS + > | ~~~~~~~~~~~~~~~~~~~~~ ^ > 501 | item]; > | ~~~~ > include/linux/vmstat.h:507:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion] > 507 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS + > | ~~~~~~~~~~~~~~~~~~~~~ ^ > 508 | NR_VM_NUMA_EVENT_ITEMS + > | ~~~~~~~~~~~~~~~~~~~~~~ > include/linux/vmstat.h:514:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion] > 514 | return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_" > | ~~~~~~~~~~~ ^ ~~~ > include/linux/vmstat.h:519:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion] > 519 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS + > | ~~~~~~~~~~~~~~~~~~~~~ ^ > 520 | NR_VM_NUMA_EVENT_ITEMS + > | ~~~~~~~~~~~~~~~~~~~~~~ > include/linux/vmstat.h:528:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion] > 528 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS + > | ~~~~~~~~~~~~~~~~~~~~~ ^ > 529 | NR_VM_NUMA_EVENT_ITEMS + > | ~~~~~~~~~~~~~~~~~~~~~~ >>> drivers/net/wireless/intel/iwlwifi/mvm/d3.c:2149:2: error: call to '__compiletime_assert_1044' declared with 'error' attribute: BUILD_BUG_ON failed: conf->keylen < WLAN_KEY_LEN_GCMP_256 > 2149 | BUILD_BUG_ON(conf->keylen < WLAN_KEY_LEN_GCMP_256); > | ^ > include/linux/build_bug.h:50:2: note: expanded from macro 'BUILD_BUG_ON' > 50 | BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition) > | ^ > include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG' > 39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) > | ^ > include/linux/compiler_types.h:510:2: note: expanded from macro 'compiletime_assert' > 510 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) > | ^ > include/linux/compiler_types.h:498:2: note: expanded from macro '_compiletime_assert' > 498 | __compiletime_assert(condition, msg, prefix, suffix) > | ^ > include/linux/compiler_types.h:491:4: note: expanded from macro '__compiletime_assert' > 491 | prefix ## suffix(); \ > | ^ > <scratch space>:38:1: note: expanded from here > 38 | __compiletime_assert_1044 > | ^ >>> drivers/net/wireless/intel/iwlwifi/mvm/d3.c:2148:2: error: call to '__compiletime_assert_1043' declared with 'error' attribute: BUILD_BUG_ON failed: conf->keylen < WLAN_KEY_LEN_CCMP > 2148 | BUILD_BUG_ON(conf->keylen < WLAN_KEY_LEN_CCMP); > | ^ > include/linux/build_bug.h:50:2: note: expanded from macro 'BUILD_BUG_ON' > 50 | BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition) > | ^ > include/linux/build_bug.h:39:37: note: expanded from macro 'BUILD_BUG_ON_MSG' > 39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg) > | ^ > include/linux/compiler_types.h:510:2: note: expanded from macro 'compiletime_assert' > 510 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) > | ^ > include/linux/compiler_types.h:498:2: note: expanded from macro '_compiletime_assert' > 498 | __compiletime_assert(condition, msg, prefix, suffix) > | ^ > include/linux/compiler_types.h:491:4: note: expanded from macro '__compiletime_assert' > 491 | prefix ## suffix(); \ > | ^ > <scratch space>:34:1: note: expanded from here > 34 | __compiletime_assert_1043 > | ^ > 5 warnings and 2 errors generated. > > > vim +2149 drivers/net/wireless/intel/iwlwifi/mvm/d3.c > > 2134 > 2135 static bool iwl_mvm_gtk_rekey(struct iwl_wowlan_status_data *status, > 2136 struct ieee80211_vif *vif, > 2137 struct iwl_mvm *mvm, u32 gtk_cipher) > 2138 { > 2139 int i, j; > 2140 struct ieee80211_key_conf *key; > 2141 DEFINE_FLEX(struct ieee80211_key_conf, conf, key, keylen, > 2142 WOWLAN_KEY_MAX_SIZE); > 2143 int link_id = vif->active_links ? __ffs(vif->active_links) : -1; Holy molly guaca-guaca... swapping the above two lines fixes the issue: diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/d3.c b/drivers/net/wireless/intel/iwlwifi/mvm/d3.c index 581455ab5e6d..764580cf6c58 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/d3.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/d3.c @@ -2138,9 +2138,8 @@ static bool iwl_mvm_gtk_rekey(struct iwl_wowlan_status_data *status, { int i, j; struct ieee80211_key_conf *key; - DEFINE_FLEX(struct ieee80211_key_conf, conf, key, keylen, - WOWLAN_KEY_MAX_SIZE); int link_id = vif->active_links ? __ffs(vif->active_links) : -1; + DEFINE_FLEX(struct ieee80211_key_conf, conf, key, keylen, WOWLAN_KEY_MAX_SIZE); conf->cipher = gtk_cipher; This is the first time I've seen this compiler behavior when building DEFINE_FLEX() changes... -- Gustavo > 2144 > 2145 conf->cipher = gtk_cipher; > 2146 > 2147 BUILD_BUG_ON(WLAN_KEY_LEN_CCMP != WLAN_KEY_LEN_GCMP); >> 2148 BUILD_BUG_ON(conf->keylen < WLAN_KEY_LEN_CCMP); >> 2149 BUILD_BUG_ON(conf->keylen < WLAN_KEY_LEN_GCMP_256); > 2150 BUILD_BUG_ON(conf->keylen < WLAN_KEY_LEN_TKIP); > 2151 BUILD_BUG_ON(conf->keylen < sizeof(status->gtk[0].key)); > 2152 > 2153 switch (gtk_cipher) { > 2154 case WLAN_CIPHER_SUITE_CCMP: > 2155 case WLAN_CIPHER_SUITE_GCMP: > 2156 conf->keylen = WLAN_KEY_LEN_CCMP; > 2157 break; > 2158 case WLAN_CIPHER_SUITE_GCMP_256: > 2159 conf->keylen = WLAN_KEY_LEN_GCMP_256; > 2160 break; > 2161 case WLAN_CIPHER_SUITE_TKIP: > 2162 conf->keylen = WLAN_KEY_LEN_TKIP; > 2163 break; > 2164 default: > 2165 WARN_ON(1); > 2166 } > 2167 > 2168 for (i = 0; i < ARRAY_SIZE(status->gtk); i++) { > 2169 if (!status->gtk[i].len) > 2170 continue; > 2171 > 2172 conf->keyidx = status->gtk[i].id; > 2173 IWL_DEBUG_WOWLAN(mvm, > 2174 "Received from FW GTK cipher %d, key index %d\n", > 2175 conf->cipher, conf->keyidx); > 2176 memcpy(conf->key, status->gtk[i].key, > 2177 sizeof(status->gtk[i].key)); > 2178 > 2179 key = ieee80211_gtk_rekey_add(vif, conf, link_id); > 2180 if (IS_ERR(key)) > 2181 return false; > 2182 > 2183 for (j = 0; j < ARRAY_SIZE(status->gtk_seq); j++) { > 2184 if (!status->gtk_seq[j].valid || > 2185 status->gtk_seq[j].key_id != key->keyidx) > 2186 continue; > 2187 iwl_mvm_set_key_rx_seq_idx(key, status, j); > 2188 break; > 2189 } > 2190 WARN_ON(j == ARRAY_SIZE(status->gtk_seq)); > 2191 } > 2192 > 2193 return true; > 2194 } > 2195 >
diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/sta.h b/drivers/net/wireless/intel/iwlwifi/fw/api/sta.h index d7f8a276b683..fe6bd34fefa3 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/api/sta.h +++ b/drivers/net/wireless/intel/iwlwifi/fw/api/sta.h @@ -479,7 +479,7 @@ struct iwl_mvm_wep_key_cmd { u8 decryption_type; u8 flags; u8 reserved; - struct iwl_mvm_wep_key wep_key[]; + struct iwl_mvm_wep_key wep_key[] __counted_by(num_keys); } __packed; /* SEC_CURR_WEP_KEY_CMD_API_S_VER_2 */ /** diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/d3.c b/drivers/net/wireless/intel/iwlwifi/mvm/d3.c index b4d650583ac2..b19579dd8de3 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/d3.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/d3.c @@ -120,19 +120,15 @@ static void iwl_mvm_wowlan_program_keys(struct ieee80211_hw *hw, switch (key->cipher) { case WLAN_CIPHER_SUITE_WEP40: case WLAN_CIPHER_SUITE_WEP104: { /* hack it for now */ - struct { - struct iwl_mvm_wep_key_cmd wep_key_cmd; - struct iwl_mvm_wep_key wep_key; - } __packed wkc = { - .wep_key_cmd.mac_id_n_color = - cpu_to_le32(FW_CMD_ID_AND_COLOR(mvmvif->id, - mvmvif->color)), - .wep_key_cmd.num_keys = 1, - /* firmware sets STA_KEY_FLG_WEP_13BYTES */ - .wep_key_cmd.decryption_type = STA_KEY_FLG_WEP, - .wep_key.key_index = key->keyidx, - .wep_key.key_size = key->keylen, - }; + DEFINE_FLEX(struct iwl_mvm_wep_key_cmd, wkc, wep_key, num_keys, 1); + + wkc->mac_id_n_color = + cpu_to_le32(FW_CMD_ID_AND_COLOR(mvmvif->id, + mvmvif->color)); + /* firmware sets STA_KEY_FLG_WEP_13BYTES */ + wkc->decryption_type = STA_KEY_FLG_WEP; + wkc->wep_key[0].key_index = key->keyidx; + wkc->wep_key[0].key_size = key->keylen; /* * This will fail -- the key functions don't set support @@ -142,18 +138,18 @@ static void iwl_mvm_wowlan_program_keys(struct ieee80211_hw *hw, if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE) break; - memcpy(&wkc.wep_key.key[3], key->key, key->keylen); + memcpy(&wkc->wep_key[0].key[3], key->key, key->keylen); if (key->keyidx == mvmvif->tx_key_idx) { /* TX key must be at offset 0 */ - wkc.wep_key.key_offset = 0; + wkc->wep_key[0].key_offset = 0; } else { /* others start at 1 */ data->wep_key_idx++; - wkc.wep_key.key_offset = data->wep_key_idx; + wkc->wep_key[0].key_offset = data->wep_key_idx; } mutex_lock(&mvm->mutex); - ret = iwl_mvm_send_cmd_pdu(mvm, WEP_KEY, 0, sizeof(wkc), &wkc); + ret = iwl_mvm_send_cmd_pdu(mvm, WEP_KEY, 0, __struct_size(wkc), wkc); data->error = ret != 0; mvm->ptk_ivlen = key->iv_len; @@ -2049,10 +2045,8 @@ static bool iwl_mvm_mlo_gtk_rekey(struct iwl_wowlan_status_data *status, struct iwl_wowlan_mlo_gtk *mlo_key = &status->mlo_keys[i]; struct ieee80211_key_conf *key, *old_key; struct ieee80211_key_seq seq; - struct { - struct ieee80211_key_conf conf; - u8 key[32]; - } conf = {}; + DEFINE_FLEX(struct ieee80211_key_conf, conf, key, keylen, + WOWLAN_KEY_MAX_SIZE); u16 flags = le16_to_cpu(mlo_key->flags); int j, link_id, key_id, key_type; @@ -2069,40 +2063,40 @@ static bool iwl_mvm_mlo_gtk_rekey(struct iwl_wowlan_status_data *status, key_type >= WOWLAN_MLO_GTK_KEY_NUM_TYPES)) continue; - conf.conf.cipher = old_keys->cipher[link_id][key_type]; + conf->cipher = old_keys->cipher[link_id][key_type]; /* WARN_ON? */ - if (!conf.conf.cipher) + if (!conf->cipher) continue; - conf.conf.keylen = 0; - switch (conf.conf.cipher) { + conf->keylen = 0; + switch (conf->cipher) { case WLAN_CIPHER_SUITE_CCMP: case WLAN_CIPHER_SUITE_GCMP: - conf.conf.keylen = WLAN_KEY_LEN_CCMP; + conf->keylen = WLAN_KEY_LEN_CCMP; break; case WLAN_CIPHER_SUITE_GCMP_256: - conf.conf.keylen = WLAN_KEY_LEN_GCMP_256; + conf->keylen = WLAN_KEY_LEN_GCMP_256; break; case WLAN_CIPHER_SUITE_BIP_GMAC_128: - conf.conf.keylen = WLAN_KEY_LEN_BIP_GMAC_128; + conf->keylen = WLAN_KEY_LEN_BIP_GMAC_128; break; case WLAN_CIPHER_SUITE_BIP_GMAC_256: - conf.conf.keylen = WLAN_KEY_LEN_BIP_GMAC_256; + conf->keylen = WLAN_KEY_LEN_BIP_GMAC_256; break; case WLAN_CIPHER_SUITE_AES_CMAC: - conf.conf.keylen = WLAN_KEY_LEN_AES_CMAC; + conf->keylen = WLAN_KEY_LEN_AES_CMAC; break; case WLAN_CIPHER_SUITE_BIP_CMAC_256: - conf.conf.keylen = WLAN_KEY_LEN_BIP_CMAC_256; + conf->keylen = WLAN_KEY_LEN_BIP_CMAC_256; break; } - if (WARN_ON(!conf.conf.keylen || - conf.conf.keylen > sizeof(conf.key))) + if (WARN_ON(!conf->keylen || + conf->keylen > WOWLAN_KEY_MAX_SIZE)) continue; - memcpy(conf.conf.key, mlo_key->key, conf.conf.keylen); - conf.conf.keyidx = key_id; + memcpy(conf->key, mlo_key->key, conf->keylen); + conf->keyidx = key_id; old_key = old_keys->key[link_id][key_id]; if (old_key) { @@ -2114,7 +2108,7 @@ static bool iwl_mvm_mlo_gtk_rekey(struct iwl_wowlan_status_data *status, IWL_DEBUG_WOWLAN(mvm, "Add MLO key id %d, link id %d\n", key_id, link_id); - key = ieee80211_gtk_rekey_add(vif, &conf.conf, link_id); + key = ieee80211_gtk_rekey_add(vif, conf, link_id); if (WARN_ON(IS_ERR(key))) { ret = false; goto out; @@ -2144,30 +2138,28 @@ static bool iwl_mvm_gtk_rekey(struct iwl_wowlan_status_data *status, { int i, j; struct ieee80211_key_conf *key; - struct { - struct ieee80211_key_conf conf; - u8 key[32]; - } conf = { - .conf.cipher = gtk_cipher, - }; + DEFINE_FLEX(struct ieee80211_key_conf, conf, key, keylen, + WOWLAN_KEY_MAX_SIZE); int link_id = vif->active_links ? __ffs(vif->active_links) : -1; + conf->cipher = gtk_cipher; + BUILD_BUG_ON(WLAN_KEY_LEN_CCMP != WLAN_KEY_LEN_GCMP); - BUILD_BUG_ON(sizeof(conf.key) < WLAN_KEY_LEN_CCMP); - BUILD_BUG_ON(sizeof(conf.key) < WLAN_KEY_LEN_GCMP_256); - BUILD_BUG_ON(sizeof(conf.key) < WLAN_KEY_LEN_TKIP); - BUILD_BUG_ON(sizeof(conf.key) < sizeof(status->gtk[0].key)); + BUILD_BUG_ON(conf->keylen < WLAN_KEY_LEN_CCMP); + BUILD_BUG_ON(conf->keylen < WLAN_KEY_LEN_GCMP_256); + BUILD_BUG_ON(conf->keylen < WLAN_KEY_LEN_TKIP); + BUILD_BUG_ON(conf->keylen < sizeof(status->gtk[0].key)); switch (gtk_cipher) { case WLAN_CIPHER_SUITE_CCMP: case WLAN_CIPHER_SUITE_GCMP: - conf.conf.keylen = WLAN_KEY_LEN_CCMP; + conf->keylen = WLAN_KEY_LEN_CCMP; break; case WLAN_CIPHER_SUITE_GCMP_256: - conf.conf.keylen = WLAN_KEY_LEN_GCMP_256; + conf->keylen = WLAN_KEY_LEN_GCMP_256; break; case WLAN_CIPHER_SUITE_TKIP: - conf.conf.keylen = WLAN_KEY_LEN_TKIP; + conf->keylen = WLAN_KEY_LEN_TKIP; break; default: WARN_ON(1); @@ -2177,14 +2169,14 @@ static bool iwl_mvm_gtk_rekey(struct iwl_wowlan_status_data *status, if (!status->gtk[i].len) continue; - conf.conf.keyidx = status->gtk[i].id; + conf->keyidx = status->gtk[i].id; IWL_DEBUG_WOWLAN(mvm, "Received from FW GTK cipher %d, key index %d\n", - conf.conf.cipher, conf.conf.keyidx); - memcpy(conf.conf.key, status->gtk[i].key, + conf->cipher, conf->keyidx); + memcpy(conf->key, status->gtk[i].key, sizeof(status->gtk[i].key)); - key = ieee80211_gtk_rekey_add(vif, &conf.conf, link_id); + key = ieee80211_gtk_rekey_add(vif, conf, link_id); if (IS_ERR(key)) return false; @@ -2207,41 +2199,39 @@ iwl_mvm_d3_igtk_bigtk_rekey_add(struct iwl_wowlan_status_data *status, struct iwl_multicast_key_data *key_data) { struct ieee80211_key_conf *key_config; - struct { - struct ieee80211_key_conf conf; - u8 key[WOWLAN_KEY_MAX_SIZE]; - } conf = { - .conf.cipher = cipher, - .conf.keyidx = key_data->id, - }; + DEFINE_FLEX(struct ieee80211_key_conf, conf, key, keylen, + WOWLAN_KEY_MAX_SIZE); struct ieee80211_key_seq seq; int link_id = vif->active_links ? __ffs(vif->active_links) : -1; + conf->cipher = cipher; + conf->keyidx = key_data->id; + if (!key_data->len) return true; - iwl_mvm_d3_set_igtk_bigtk_ipn(key_data, &seq, conf.conf.cipher); + iwl_mvm_d3_set_igtk_bigtk_ipn(key_data, &seq, conf->cipher); switch (cipher) { case WLAN_CIPHER_SUITE_BIP_GMAC_128: - conf.conf.keylen = WLAN_KEY_LEN_BIP_GMAC_128; + conf->keylen = WLAN_KEY_LEN_BIP_GMAC_128; break; case WLAN_CIPHER_SUITE_BIP_GMAC_256: - conf.conf.keylen = WLAN_KEY_LEN_BIP_GMAC_256; + conf->keylen = WLAN_KEY_LEN_BIP_GMAC_256; break; case WLAN_CIPHER_SUITE_AES_CMAC: - conf.conf.keylen = WLAN_KEY_LEN_AES_CMAC; + conf->keylen = WLAN_KEY_LEN_AES_CMAC; break; case WLAN_CIPHER_SUITE_BIP_CMAC_256: - conf.conf.keylen = WLAN_KEY_LEN_BIP_CMAC_256; + conf->keylen = WLAN_KEY_LEN_BIP_CMAC_256; break; default: WARN_ON(1); } - BUILD_BUG_ON(sizeof(conf.key) < sizeof(key_data->key)); - memcpy(conf.conf.key, key_data->key, conf.conf.keylen); + BUILD_BUG_ON(WOWLAN_KEY_MAX_SIZE < sizeof(key_data->key)); + memcpy(conf->key, key_data->key, conf->keylen); - key_config = ieee80211_gtk_rekey_add(vif, &conf.conf, link_id); + key_config = ieee80211_gtk_rekey_add(vif, conf, link_id); if (IS_ERR(key_config)) return false; ieee80211_set_key_rx_seq(key_config, 0, &seq); diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c index 15e64d94d6ea..1502f577a942 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/sta.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/sta.c @@ -4350,8 +4350,8 @@ int iwl_mvm_add_pasn_sta(struct iwl_mvm *mvm, struct ieee80211_vif *vif, goto out; keyconf->cipher = cipher; - memcpy(keyconf->key, key, key_len); keyconf->keylen = key_len; + memcpy(keyconf->key, key, keyconf->keylen); keyconf->flags = IEEE80211_KEY_FLAG_PAIRWISE; if (mld) { diff --git a/include/net/mac80211.h b/include/net/mac80211.h index 0a04eaf5343c..d3f6056daf8a 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h @@ -2222,7 +2222,7 @@ struct ieee80211_key_conf { u16 flags; s8 link_id; u8 keylen; - u8 key[]; + u8 key[] __counted_by(keylen); }; #define IEEE80211_MAX_PN_LEN 16
-Wflex-array-member-not-at-end was introduced in GCC-14, and we are getting ready to enable it, globally. So, use the `DEFINE_FLEX()` helper for multiple on-stack definitions of flexible structures where the size of their flexible-array members are known at compile-time, and refactor the rest of the code, accordingly. In order to allow for the use of `DEFINE_FLEX()`, a couple of structures were annotated with the `__counted_by()` attribute. With these changes, fix the following warnings: drivers/net/wireless/intel/iwlwifi/mvm/d3.c:124:52: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end] drivers/net/wireless/intel/iwlwifi/mvm/d3.c:2053:51: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end] drivers/net/wireless/intel/iwlwifi/mvm/d3.c:2148:43: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end] drivers/net/wireless/intel/iwlwifi/mvm/d3.c:2211:43: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end] Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org> --- Changes in v2: - Fix use of keylen variable. .../net/wireless/intel/iwlwifi/fw/api/sta.h | 2 +- drivers/net/wireless/intel/iwlwifi/mvm/d3.c | 126 ++++++++---------- drivers/net/wireless/intel/iwlwifi/mvm/sta.c | 2 +- include/net/mac80211.h | 2 +- 4 files changed, 61 insertions(+), 71 deletions(-)