aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwmc3200wifi
diff options
context:
space:
mode:
authorSamuel Ortiz <samuel.ortiz@intel.com>2009-06-15 21:59:50 +0200
committerJohn W. Linville <linville@tuxdriver.com>2009-07-10 14:57:51 -0400
commit0c5553b1392dea5ba5ad678790367c1275ed1172 (patch)
tree1140189a99f9354c4c1f62b14497ed59e6c6a844 /drivers/net/wireless/iwmc3200wifi
parentiwlwifi: remove disable_tx_power for device > 4965 (diff)
downloadlinux-dev-0c5553b1392dea5ba5ad678790367c1275ed1172.tar.xz
linux-dev-0c5553b1392dea5ba5ad678790367c1275ed1172.zip
iwmc3200wifi: invalidate keys when changing the BSSID
While associated, we have to invalidate our key cache if we clear our BSSID through siwap. Signed-off-by: Samuel Ortiz <samuel.ortiz@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/iwmc3200wifi')
-rw-r--r--drivers/net/wireless/iwmc3200wifi/wext.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/drivers/net/wireless/iwmc3200wifi/wext.c b/drivers/net/wireless/iwmc3200wifi/wext.c
index 584c94d0f399..889194931b4e 100644
--- a/drivers/net/wireless/iwmc3200wifi/wext.c
+++ b/drivers/net/wireless/iwmc3200wifi/wext.c
@@ -82,6 +82,7 @@ static int iwm_wext_siwap(struct net_device *dev, struct iw_request_info *info,
struct sockaddr *ap_addr, char *extra)
{
struct iwm_priv *iwm = ndev_to_iwm(dev);
+ int ret;
if (iwm->conf.mode == UMAC_MODE_IBSS)
return cfg80211_ibss_wext_siwap(dev, info, ap_addr, extra);
@@ -104,10 +105,26 @@ static int iwm_wext_siwap(struct net_device *dev, struct iw_request_info *info,
}
if (iwm->umac_profile_active) {
+ int i;
+
if (!memcmp(&iwm->umac_profile->bssid[0], iwm->bssid, ETH_ALEN))
return 0;
- iwm_invalidate_mlme_profile(iwm);
+ /*
+ * If we're clearing the BSSID, and we're associated,
+ * we have to clear the keys as they're no longer valid.
+ */
+ if (is_zero_ether_addr(ap_addr->sa_data)) {
+ for (i = 0; i < IWM_NUM_KEYS; i++)
+ iwm->keys[i].in_use = 0;
+
+ }
+
+ ret = iwm_invalidate_mlme_profile(iwm);
+ if (ret < 0) {
+ IWM_ERR(iwm, "Couldn't invalidate profile\n");
+ return ret;
+ }
}
if (iwm->umac_profile->ssid.ssid_len)