aboutsummaryrefslogtreecommitdiffstats
path: root/net/wireless/sme.c
diff options
context:
space:
mode:
authorJohannes Berg <johannes@sipsolutions.net>2009-08-04 03:32:23 -0400
committerJohn W. Linville <linville@tuxdriver.com>2009-08-04 16:44:26 -0400
commit8dadadb7e977a91b46ed3549f9d2f22a629e5043 (patch)
tree0197012596c7c6f148e8b268b78f69a0e7f45250 /net/wireless/sme.c
parent847c1e130092240c225a7be08607a7bf4e296fbd (diff)
cfg80211: clear SSID on disconnect/no connection
The SME state machine in cfg80211 uses the SSID stored in struct wireless_dev internally, but fails to clear it in multiple places (when giving up on a connection attempt and when disconnecting). This doesn't matter to the SME state machine, but does matter for IBSS. Thus, in those cases, clear the SSID to avoid messing up the IBSS state machine. Reported-by: Joerg Albert <jal2@gmx.de> Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/wireless/sme.c')
-rw-r--r--net/wireless/sme.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/net/wireless/sme.c b/net/wireless/sme.c
index af91192eedf5..8a7dcbf90602 100644
--- a/net/wireless/sme.c
+++ b/net/wireless/sme.c
@@ -385,6 +385,7 @@ void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid,
385 wdev->conn = NULL; 385 wdev->conn = NULL;
386 kfree(wdev->connect_keys); 386 kfree(wdev->connect_keys);
387 wdev->connect_keys = NULL; 387 wdev->connect_keys = NULL;
388 wdev->ssid_len = 0;
388 return; 389 return;
389 } 390 }
390 391
@@ -566,6 +567,7 @@ void __cfg80211_disconnected(struct net_device *dev, const u8 *ie,
566 567
567 wdev->current_bss = NULL; 568 wdev->current_bss = NULL;
568 wdev->sme_state = CFG80211_SME_IDLE; 569 wdev->sme_state = CFG80211_SME_IDLE;
570 wdev->ssid_len = 0;
569 571
570 if (wdev->conn) { 572 if (wdev->conn) {
571 kfree(wdev->conn->ie); 573 kfree(wdev->conn->ie);
@@ -721,6 +723,7 @@ int __cfg80211_connect(struct cfg80211_registered_device *rdev,
721 wdev->conn = NULL; 723 wdev->conn = NULL;
722 wdev->sme_state = CFG80211_SME_IDLE; 724 wdev->sme_state = CFG80211_SME_IDLE;
723 wdev->connect_keys = NULL; 725 wdev->connect_keys = NULL;
726 wdev->ssid_len = 0;
724 } 727 }
725 728
726 return err; 729 return err;
@@ -785,6 +788,7 @@ int __cfg80211_disconnect(struct cfg80211_registered_device *rdev,
785 wdev->sme_state = CFG80211_SME_IDLE; 788 wdev->sme_state = CFG80211_SME_IDLE;
786 kfree(wdev->conn); 789 kfree(wdev->conn);
787 wdev->conn = NULL; 790 wdev->conn = NULL;
791 wdev->ssid_len = 0;
788 return 0; 792 return 0;
789 } 793 }
790 794