diff options
| author | David S. Miller <davem@davemloft.net> | 2011-05-05 14:09:28 -0700 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2011-05-05 14:09:28 -0700 | 
| commit | 90864fbc7639d7a2300c67a18c9fb9fbcf7d51d2 (patch) | |
| tree | 6951c8d0e529dbfc7c4cec75d4cec63350e39b7c /drivers/net/wireless/wl12xx/scan.c | |
| parent | 228e548e602061b08ee8e8966f567c12aa079682 (diff) | |
| parent | a70171dce9cd44cb06c7d299eba9fa87a8933045 (diff) | |
| download | olio-linux-3.10-90864fbc7639d7a2300c67a18c9fb9fbcf7d51d2.tar.xz olio-linux-3.10-90864fbc7639d7a2300c67a18c9fb9fbcf7d51d2.zip  | |
Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next-2.6
Diffstat (limited to 'drivers/net/wireless/wl12xx/scan.c')
| -rw-r--r-- | drivers/net/wireless/wl12xx/scan.c | 17 | 
1 files changed, 10 insertions, 7 deletions
diff --git a/drivers/net/wireless/wl12xx/scan.c b/drivers/net/wireless/wl12xx/scan.c index 420653a2859..5d0544c8f3f 100644 --- a/drivers/net/wireless/wl12xx/scan.c +++ b/drivers/net/wireless/wl12xx/scan.c @@ -48,8 +48,7 @@ void wl1271_scan_complete_work(struct work_struct *work)  		goto out;  	wl->scan.state = WL1271_SCAN_STATE_IDLE; -	kfree(wl->scan.scanned_ch); -	wl->scan.scanned_ch = NULL; +	memset(wl->scan.scanned_ch, 0, sizeof(wl->scan.scanned_ch));  	wl->scan.req = NULL;  	ieee80211_scan_completed(wl->hw, false); @@ -87,7 +86,7 @@ static int wl1271_get_scan_channels(struct wl1271 *wl,  		flags = req->channels[i]->flags; -		if (!wl->scan.scanned_ch[i] && +		if (!test_bit(i, wl->scan.scanned_ch) &&  		    !(flags & IEEE80211_CHAN_DISABLED) &&  		    ((!!(flags & IEEE80211_CHAN_PASSIVE_SCAN)) == passive) &&  		    (req->channels[i]->band == band)) { @@ -124,7 +123,7 @@ static int wl1271_get_scan_channels(struct wl1271 *wl,  			memset(&channels[j].bssid_msb, 0xff, 2);  			/* Mark the channels we already used */ -			wl->scan.scanned_ch[i] = true; +			set_bit(i, wl->scan.scanned_ch);  			j++;  		} @@ -291,6 +290,12 @@ void wl1271_scan_stm(struct wl1271 *wl)  int wl1271_scan(struct wl1271 *wl, const u8 *ssid, size_t ssid_len,  		struct cfg80211_scan_request *req)  { +	/* +	 * cfg80211 should guarantee that we don't get more channels +	 * than what we have registered. +	 */ +	BUG_ON(req->n_channels > WL1271_MAX_CHANNELS); +  	if (wl->scan.state != WL1271_SCAN_STATE_IDLE)  		return -EBUSY; @@ -304,10 +309,8 @@ int wl1271_scan(struct wl1271 *wl, const u8 *ssid, size_t ssid_len,  	}  	wl->scan.req = req; +	memset(wl->scan.scanned_ch, 0, sizeof(wl->scan.scanned_ch)); -	wl->scan.scanned_ch = kcalloc(req->n_channels, -				      sizeof(*wl->scan.scanned_ch), -				      GFP_KERNEL);  	/* we assume failure so that timeout scenarios are handled correctly */  	wl->scan.failed = true;  	ieee80211_queue_delayed_work(wl->hw, &wl->scan_complete_work,  |