diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl4965-base.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl4965-base.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl4965-base.c b/drivers/net/wireless/iwlwifi/iwl4965-base.c index 37ab1c565ce1..da01896bd406 100644 --- a/drivers/net/wireless/iwlwifi/iwl4965-base.c +++ b/drivers/net/wireless/iwlwifi/iwl4965-base.c | |||
@@ -1140,8 +1140,8 @@ static int iwl4965_set_ccmp_dynamic_key_info(struct iwl_priv *priv, | |||
1140 | memcpy(priv->stations[sta_id].sta.key.key, keyconf->key, | 1140 | memcpy(priv->stations[sta_id].sta.key.key, keyconf->key, |
1141 | keyconf->keylen); | 1141 | keyconf->keylen); |
1142 | 1142 | ||
1143 | priv->stations[sta_id].sta.key.key_offset | 1143 | priv->stations[sta_id].sta.key.key_offset = |
1144 | = (sta_id % STA_KEY_MAX_NUM);/*FIXME*/ | 1144 | iwl_get_free_ucode_key_index(priv); |
1145 | priv->stations[sta_id].sta.key.key_flags = key_flags; | 1145 | priv->stations[sta_id].sta.key.key_flags = key_flags; |
1146 | priv->stations[sta_id].sta.sta.modify_mask = STA_MODIFY_KEY_MASK; | 1146 | priv->stations[sta_id].sta.sta.modify_mask = STA_MODIFY_KEY_MASK; |
1147 | priv->stations[sta_id].sta.mode = STA_CONTROL_MODIFY_MSK; | 1147 | priv->stations[sta_id].sta.mode = STA_CONTROL_MODIFY_MSK; |
@@ -1187,6 +1187,10 @@ static int iwl4965_clear_sta_key_info(struct iwl_priv *priv, u8 sta_id) | |||
1187 | priv->key_mapping_key = 0; | 1187 | priv->key_mapping_key = 0; |
1188 | 1188 | ||
1189 | spin_lock_irqsave(&priv->sta_lock, flags); | 1189 | spin_lock_irqsave(&priv->sta_lock, flags); |
1190 | if (!test_and_clear_bit(priv->stations[sta_id].sta.key.key_offset, | ||
1191 | &priv->ucode_key_table)) | ||
1192 | IWL_ERROR("index %d not used in uCode key table.\n", | ||
1193 | priv->stations[sta_id].sta.key.key_offset); | ||
1190 | memset(&priv->stations[sta_id].keyinfo, 0, sizeof(struct iwl4965_hw_key)); | 1194 | memset(&priv->stations[sta_id].keyinfo, 0, sizeof(struct iwl4965_hw_key)); |
1191 | memset(&priv->stations[sta_id].sta.key, 0, sizeof(struct iwl4965_keyinfo)); | 1195 | memset(&priv->stations[sta_id].sta.key, 0, sizeof(struct iwl4965_keyinfo)); |
1192 | priv->stations[sta_id].sta.key.key_flags = STA_KEY_FLG_NO_ENC; | 1196 | priv->stations[sta_id].sta.key.key_flags = STA_KEY_FLG_NO_ENC; |
@@ -6971,7 +6975,7 @@ static void iwl4965_mac_update_tkip_key(struct ieee80211_hw *hw, | |||
6971 | spin_lock_irqsave(&priv->sta_lock, flags); | 6975 | spin_lock_irqsave(&priv->sta_lock, flags); |
6972 | 6976 | ||
6973 | priv->stations[sta_id].sta.key.key_offset = | 6977 | priv->stations[sta_id].sta.key.key_offset = |
6974 | (sta_id % STA_KEY_MAX_NUM);/* FIXME */ | 6978 | iwl_get_free_ucode_key_index(priv); |
6975 | priv->stations[sta_id].sta.key.key_flags = key_flags; | 6979 | priv->stations[sta_id].sta.key.key_flags = key_flags; |
6976 | priv->stations[sta_id].sta.key.tkip_rx_tsc_byte2 = (u8) iv32; | 6980 | priv->stations[sta_id].sta.key.tkip_rx_tsc_byte2 = (u8) iv32; |
6977 | 6981 | ||