~ubuntu-branches/ubuntu/hardy/linux-backports-modules-2.6.24/hardy-security

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
Index: compatible/net/mac80211/ieee80211_ioctl.c
===================================================================
--- compatible.orig/net/mac80211/ieee80211_ioctl.c	2008-01-06 12:07:06.000000000 +0200
+++ compatible/net/mac80211/ieee80211_ioctl.c	2008-01-06 12:08:57.000000000 +0200
@@ -693,6 +693,7 @@
 	struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
 	u8 *ssid = NULL;
 	size_t ssid_len = 0;
+	struct iw_scan_req* scan = (struct iw_scan_req*) extra;
 
 	if (!netif_running(dev))
 		return -ENETDOWN;
@@ -700,9 +701,16 @@
 	switch (sdata->type) {
 	case IEEE80211_IF_TYPE_STA:
 	case IEEE80211_IF_TYPE_IBSS:
-		if (local->scan_flags & IEEE80211_SCAN_MATCH_SSID) {
+		if (data->flags & IW_SCAN_THIS_ESSID) {
+			ssid = scan->essid;
+			ssid_len = scan->essid_len;
+			local->scan_ssid_len = ssid_len;
+			memcpy(local->scan_ssid, ssid, ssid_len);
+		} else if (local->scan_flags & IEEE80211_SCAN_MATCH_SSID) {
 			ssid = sdata->u.sta.ssid;
 			ssid_len = sdata->u.sta.ssid_len;
+			local->scan_ssid_len = ssid_len;
+			memcpy(local->scan_ssid, ssid, ssid_len);
 		}
 		break;
 	case IEEE80211_IF_TYPE_AP:
Index: compatible/net/mac80211/ieee80211_sta.c
===================================================================
--- compatible.orig/net/mac80211/ieee80211_sta.c	2008-01-06 12:08:42.000000000 +0200
+++ compatible/net/mac80211/ieee80211_sta.c	2008-01-06 12:08:57.000000000 +0200
@@ -3552,7 +3552,10 @@
 	if (ifsta->state != IEEE80211_AUTHENTICATE &&
 	    ifsta->state != IEEE80211_ASSOCIATE &&
 	    test_and_clear_bit(IEEE80211_STA_REQ_SCAN, &ifsta->request)) {
-		ieee80211_sta_start_scan(dev, NULL, 0);
+		if (local->scan_ssid_len)
+			ieee80211_sta_start_scan(dev, local->scan_ssid, local->scan_ssid_len);
+		else
+			ieee80211_sta_start_scan(dev, NULL, 0);
 		return;
 	}