From 17d171bdd2f22b5031a579d2dae60b28747bb98c Mon Sep 17 00:00:00 2001 From: Samuel Ortiz Date: Mon, 15 Jun 2009 21:59:50 +0200 Subject: [PATCH] --- yaml --- r: 158824 b: refs/heads/master c: 0c5553b1392dea5ba5ad678790367c1275ed1172 h: refs/heads/master v: v3 --- [refs] | 2 +- .../drivers/net/wireless/iwmc3200wifi/wext.c | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 454232105cf4..bc23726d8ffd 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 030b865520c3e26f4a316852aa022a22c4948907 +refs/heads/master: 0c5553b1392dea5ba5ad678790367c1275ed1172 diff --git a/trunk/drivers/net/wireless/iwmc3200wifi/wext.c b/trunk/drivers/net/wireless/iwmc3200wifi/wext.c index 584c94d0f399..889194931b4e 100644 --- a/trunk/drivers/net/wireless/iwmc3200wifi/wext.c +++ b/trunk/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)