wifi: iwlwifi: mvm: d3: Avoid -Wflex-array-member-not-at-end warnings
PATCH 1/1 wifi: iwlwifi: mvm: d3: Avoid -Wflex-array-member-not-at-end warnings
-Wflex-array-member-not-at-end was introduced in GCC-14, and we are getting ready to enable it, globally.
Use the DEFINE_RAW_FLEX() helper for on-stack definitions of a flexible structure where the size of the flexible-array member is known at compile-time, and refactor the rest of the code, accordingly.
So, 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:2067: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:2162: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:2225: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 | 129 +++++++++----------- 1 file changed, 61 insertions(+), 68 deletions(-)
drivers/net/wireless/intel/iwlwifi/mvm/d3.c +61 -68
@@ -120,19 +120,17 @@ 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_RAW_FLEX(struct iwl_mvm_wep_key_cmd, wkc, wep_key, 1); +struct iwl_mvm_wep_key *wep_key = wkc->wep_key; + + wkc->mac_id_n_color = +cpu_to_le32 (FW_CMD_ID_AND_COLOR (mvmvif->id, + mvmvif->color)); + wkc->num_keys =1 ; +/* firmware sets STA_KEY_FLG_WEP_13BYTES */ + wkc->decryption_type =STA_KEY_FLG_WEP ; + wep_key->key_index = key->keyidx; + wep_key->key_size = key->keylen;/* * This will fail -- the key functions don't set support
@@ -142,18 +140,19 @@ 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 (&wep_key->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 ; + wep_key->key_offset =0 ; }else {/* others start at 1 */ data->wep_key_idx++; - wkc.wep_key.key_offset = data->wep_key_idx; + wep_key->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;
@@ -2063,10 +2062,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_RAW_FLEX(struct ieee80211_key_conf, conf, key, + WOWLAN_KEY_MAX_SIZE);u16 flags =le16_to_cpu (mlo_key->flags);int j, link_id, key_id, key_type;
@@ -2083,40 +2080,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) {
@@ -2128,7 +2125,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;
@@ -2158,30 +2155,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_RAW_FLEX(struct ieee80211_key_conf, conf, key, + 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 (WOWLAN_KEY_MAX_SIZE <WLAN_KEY_LEN_CCMP ); +BUILD_BUG_ON (WOWLAN_KEY_MAX_SIZE <WLAN_KEY_LEN_GCMP_256 ); +BUILD_BUG_ON (WOWLAN_KEY_MAX_SIZE <WLAN_KEY_LEN_TKIP ); +BUILD_BUG_ON (WOWLAN_KEY_MAX_SIZE <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 );
@@ -2191,14 +2186,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;
@@ -2220,42 +2215,40 @@ iwl_mvm_d3_igtk_bigtk_rekey_add(struct iwl_wowlan_status_data *status, struct ieee80211_vif *vif, u32 cipher, struct iwl_multicast_key_data *key_data) { +DEFINE_RAW_FLEX (struct ieee80211_key_conf ,conf ,key , +WOWLAN_KEY_MAX_SIZE );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, - };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);
Signature · 1 line
2.43.0
Quoted 38 lines · Gustavo A. R. Silva
-Wflex-array-member-not-at-end was introduced in GCC-14, and we are getting ready to enable it, globally.
Use the
DEFINE_RAW_FLEX()helper for on-stack definitions of a flexible structure where the size of the flexible-array member is known at compile-time, and refactor the rest of the code, accordingly.So, 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:2067: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:2162: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:2225: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 <[email protected]>--- drivers/net/wireless/intel/iwlwifi/mvm/d3.c | 129 +++++++++----------- 1 file changed, 61 insertions(+), 68 deletions(-)drivers/net/wireless/intel/iwlwifi/mvm/d3.c +0
-10@@ -120,19 +120,17 @@ 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,
drivers/net/wireless/intel/iwlwifi/mvm/d3.c static void iwl_mvm_wowlan_program_keys(struct ieee80211_hw *hw, · line 129
Quoted 10 lines
drivers/net/wireless/intel/iwlwifi/mvm/d3.c +7
-3- .wep_key.key_index = key->keyidx, - .wep_key.key_size = key->keylen, - }; + DEFINE_RAW_FLEX(struct iwl_mvm_wep_key_cmd, wkc, wep_key, 1); +struct iwl_mvm_wep_key *wep_key = wkc->wep_key; + + wkc->mac_id_n_color = +cpu_to_le32 (FW_CMD_ID_AND_COLOR (mvmvif->id, + mvmvif->color)); + wkc->num_keys =1 ;
Looks like struct iwl_mvm_wep_key_cmd::num_keys is the counted_by for struct iwl_mvm_wep_key_cmd::wep_key?
Quoted 32 lines
drivers/net/wireless/intel/iwlwifi/mvm/d3.c +9
-4+/* firmware sets STA_KEY_FLG_WEP_13BYTES */ + wkc->decryption_type =STA_KEY_FLG_WEP ; + wep_key->key_index = key->keyidx; + wep_key->key_size = key->keylen;/* * This will fail -- the key functions don't set support @@ -142,18 +140,19 @@ 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 (&wep_key->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 ; + wep_key->key_offset =0 ; }else {/* others start at 1 */ data->wep_key_idx++; - wkc.wep_key.key_offset = data->wep_key_idx; + wep_key->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;
drivers/net/wireless/intel/iwlwifi/mvm/d3.c static bool iwl_mvm_mlo_gtk_rekey(struct iwl_wowlan_status_data *status, · line 2066
Quoted 9 lines
drivers/net/wireless/intel/iwlwifi/mvm/d3.c +2
-4@@ -2063,10 +2062,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_RAW_FLEX(struct ieee80211_key_conf, conf, key, + WOWLAN_KEY_MAX_SIZE);
Okay, yes, WOWLAN_KEY_MAX_SIZE == 32.
Quoted 174 lines
drivers/net/wireless/intel/iwlwifi/mvm/d3.c +40
-44u16 flags =le16_to_cpu (mlo_key->flags);int j, link_id, key_id, key_type;@@ -2083,40 +2080,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) {@@ -2128,7 +2125,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;@@ -2158,30 +2155,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_RAW_FLEX(struct ieee80211_key_conf, conf, key, + 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 (WOWLAN_KEY_MAX_SIZE <WLAN_KEY_LEN_CCMP ); +BUILD_BUG_ON (WOWLAN_KEY_MAX_SIZE <WLAN_KEY_LEN_GCMP_256 ); +BUILD_BUG_ON (WOWLAN_KEY_MAX_SIZE <WLAN_KEY_LEN_TKIP ); +BUILD_BUG_ON (WOWLAN_KEY_MAX_SIZE <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 );@@ -2191,14 +2186,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;@@ -2220,42 +2215,40 @@ iwl_mvm_d3_igtk_bigtk_rekey_add(struct iwl_wowlan_status_data *status, struct ieee80211_vif *vif, u32 cipher, struct iwl_multicast_key_data *key_data) { +DEFINE_RAW_FLEX (struct ieee80211_key_conf ,conf ,key , +WOWLAN_KEY_MAX_SIZE );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, - };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 ); }
drivers/net/wireless/intel/iwlwifi/mvm/d3.c iwl_mvm_d3_igtk_bigtk_rekey_add(struct iwl_wowlan_status_data *status, · line 2254
Quoted 10 lines
drivers/net/wireless/intel/iwlwifi/mvm/d3.c +3
-3-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);
Signature · 1 line
Kees Cook
Quoted 1 line · Kees Cook
lots of quotes
It'd be really good if you could trim the quotes a bit ...
Quoted 7 lines
drivers/net/wireless/intel/iwlwifi/mvm/d3.c static void iwl_mvm_wowlan_program_keys(struct ieee80211_hw *hw, · line 129
Quoted 4 lines
drivers/net/wireless/intel/iwlwifi/mvm/d3.c +4
-0+ wkc->mac_id_n_color = +cpu_to_le32 (FW_CMD_ID_AND_COLOR (mvmvif->id, + mvmvif->color)); + wkc->num_keys =1 ;Looks like struct
iwl_mvm_wep_key_cmd::num_keysis thecounted_byfor structiwl_mvm_wep_key_cmd::wep_key?
No no no. I'm still burned by you adding this to various places elsewhere in the wireless stack, let's not.
Btw, Gustavo, I think it was probably the other iwlwifi patch, but please also make sure kernel-doc doesn't start complaining, we are trying keep it that way.
johannes
Hi all,
Friendly ping: who can take this, please? :)
Thanks!
-Gustavo
Quoted 273 lines · Gustavo A. R. Silva
-Wflex-array-member-not-at-end was introduced in GCC-14, and we are getting ready to enable it, globally.
Use the
DEFINE_RAW_FLEX()helper for on-stack definitions of a flexible structure where the size of the flexible-array member is known at compile-time, and refactor the rest of the code, accordingly.So, 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:2067: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:2162: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:2225: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 <[email protected]>--- drivers/net/wireless/intel/iwlwifi/mvm/d3.c | 129 +++++++++----------- 1 file changed, 61 insertions(+), 68 deletions(-)drivers/net/wireless/intel/iwlwifi/mvm/d3.c +61
-68@@ -120,19 +120,17 @@ 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_RAW_FLEX(struct iwl_mvm_wep_key_cmd, wkc, wep_key, 1); +struct iwl_mvm_wep_key *wep_key = wkc->wep_key; + + wkc->mac_id_n_color = +cpu_to_le32 (FW_CMD_ID_AND_COLOR (mvmvif->id, + mvmvif->color)); + wkc->num_keys =1 ; +/* firmware sets STA_KEY_FLG_WEP_13BYTES */ + wkc->decryption_type =STA_KEY_FLG_WEP ; + wep_key->key_index = key->keyidx; + wep_key->key_size = key->keylen;/* * This will fail -- the key functions don't set support @@ -142,18 +140,19 @@ 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 (&wep_key->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 ; + wep_key->key_offset =0 ; }else {/* others start at 1 */ data->wep_key_idx++; - wkc.wep_key.key_offset = data->wep_key_idx; + wep_key->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;@@ -2063,10 +2062,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_RAW_FLEX(struct ieee80211_key_conf, conf, key, + WOWLAN_KEY_MAX_SIZE);u16 flags =le16_to_cpu (mlo_key->flags);int j, link_id, key_id, key_type;@@ -2083,40 +2080,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) {@@ -2128,7 +2125,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;@@ -2158,30 +2155,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_RAW_FLEX(struct ieee80211_key_conf, conf, key, + 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 (WOWLAN_KEY_MAX_SIZE <WLAN_KEY_LEN_CCMP ); +BUILD_BUG_ON (WOWLAN_KEY_MAX_SIZE <WLAN_KEY_LEN_GCMP_256 ); +BUILD_BUG_ON (WOWLAN_KEY_MAX_SIZE <WLAN_KEY_LEN_TKIP ); +BUILD_BUG_ON (WOWLAN_KEY_MAX_SIZE <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 );@@ -2191,14 +2186,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;@@ -2220,42 +2215,40 @@ iwl_mvm_d3_igtk_bigtk_rekey_add(struct iwl_wowlan_status_data *status, struct ieee80211_vif *vif, u32 cipher, struct iwl_multicast_key_data *key_data) { +DEFINE_RAW_FLEX (struct ieee80211_key_conf ,conf ,key , +WOWLAN_KEY_MAX_SIZE );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, - };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);
Quoted 308 lines
-----Original Message-----
From: Gustavo A. R. Silva <[email protected]>
Sent: Saturday, 5 April 2025 21:07
To: Korenblit, Miriam Rachel <[email protected]>; Berg, Johannes <[email protected]>
Cc: [email protected]; [email protected]; Gustavo A. R. Silva <[email protected]>; [email protected]
Subject: [PATCH][next] wifi: iwlwifi: mvm: d3: Avoid -Wflex-array-member-not- at-end warnings-Wflex-array-member-not-at-end was introduced in GCC-14, and we are getting ready to enable it, globally.
Use the
DEFINE_RAW_FLEX()helper for on-stack definitions of a flexible structure where the size of the flexible-array member is known at compile-time, and refactor the rest of the code, accordingly.So, 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:2067: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:2162: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:2225: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 <[email protected]>--- drivers/net/wireless/intel/iwlwifi/mvm/d3.c | 129 +++++++++----------- 1 file changed, 61 insertions(+), 68 deletions(-)drivers/net/wireless/intel/iwlwifi/mvm/d3.c +1
-13@@ -120,19 +120,17 @@ 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_RAW_FLEX(struct iwl_mvm_wep_key_cmd, wkc,
wep_key, 1);drivers/net/wireless/intel/iwlwifi/mvm/d3.c +11
-0+struct iwl_mvm_wep_key *wep_key = wkc->wep_key; + + wkc->mac_id_n_color = +cpu_to_le32 (FW_CMD_ID_AND_COLOR (mvmvif->id, + mvmvif->color)); + wkc->num_keys =1 ; +/* firmware sets STA_KEY_FLG_WEP_13BYTES */ + wkc->decryption_type =STA_KEY_FLG_WEP ; + wep_key->key_index = key->keyidx; + wep_key->key_size = key->keylen;/* * This will fail -- the key functions don't set support @@ -142,18 +140,19 @@ static void iwl_mvm_wowlan_program_keys(struct ieee80211_hw *hw,
drivers/net/wireless/intel/iwlwifi/mvm/d3.c +3
-4if (key->flags &IEEE80211_KEY_FLAG_PAIRWISE )break ; -memcpy (&wkc.wep_key.key[3 ], key->key, key->keylen); +memcpy (&wep_key->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 ; + wep_key->key_offset =0 ; }else {/* others start at 1 */ data->wep_key_idx++; - wkc.wep_key.key_offset = data->wep_key_idx; + wep_key->key_offset = data->wep_key_idx; }mutex_lock (&mvm->mutex); - ret = iwl_mvm_send_cmd_pdu(mvm, WEP_KEY, 0, sizeof(wkc),&wkc);
drivers/net/wireless/intel/iwlwifi/mvm/d3.c +18
-18+ ret =iwl_mvm_send_cmd_pdu (mvm,WEP_KEY ,0 , +__struct_size (wkc), wkc); data->error = ret !=0 ; mvm->ptk_ivlen = key->iv_len;@@ -2063,10 +2062,8 @@ static bool iwl_mvm_mlo_gtk_rekey(structiwl_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_RAW_FLEX(struct ieee80211_key_conf, conf, key, + WOWLAN_KEY_MAX_SIZE);u16 flags =le16_to_cpu (mlo_key->flags);int j, link_id, key_id, key_type;@@ -2083,40 +2080,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;drivers/net/wireless/intel/iwlwifi/mvm/d3.c +1
-1old_key = old_keys->key[link_id][key_id];if (old_key) {@@ -2128,7 +2125,7 @@ static bool iwl_mvm_mlo_gtk_rekey(structiwl_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))) {drivers/net/wireless/intel/iwlwifi/mvm/d3.c +11
-13ret = false; goto out;@@ -2158,30 +2155,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_RAW_FLEX(struct ieee80211_key_conf, conf, key, + 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 (WOWLAN_KEY_MAX_SIZE <WLAN_KEY_LEN_CCMP ); +BUILD_BUG_ON (WOWLAN_KEY_MAX_SIZE <WLAN_KEY_LEN_GCMP_256 ); +BUILD_BUG_ON (WOWLAN_KEY_MAX_SIZE <WLAN_KEY_LEN_TKIP ); +BUILD_BUG_ON (WOWLAN_KEY_MAX_SIZE <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 :drivers/net/wireless/intel/iwlwifi/mvm/d3.c +4
-4WARN_ON (1 );@@ -2191,14 +2186,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))drivers/net/wireless/intel/iwlwifi/mvm/d3.c +13
-16return false;@@ -2220,42 +2215,40 @@ iwl_mvm_d3_igtk_bigtk_rekey_add(structiwl_wowlan_status_data *status, struct ieee80211_vif *vif, u32 cipher, struct iwl_multicast_key_data *key_data) { +DEFINE_RAW_FLEX (struct ieee80211_key_conf ,conf ,key , +WOWLAN_KEY_MAX_SIZE );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, - };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); --
Quoted 1 line
2.43.0