Merge git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6
Conflicts: drivers/net/wireless/libertas/scan.c
This commit is contained in:
@@ -93,7 +93,18 @@ void cfg80211_send_rx_assoc(struct net_device *dev, const u8 *buf, size_t len)
|
||||
}
|
||||
}
|
||||
|
||||
WARN_ON(!bss);
|
||||
/*
|
||||
* We might be coming here because the driver reported
|
||||
* a successful association at the same time as the
|
||||
* user requested a deauth. In that case, we will have
|
||||
* removed the BSS from the auth_bsses list due to the
|
||||
* deauth request when the assoc response makes it. If
|
||||
* the two code paths acquire the lock the other way
|
||||
* around, that's just the standard situation of a
|
||||
* deauth being requested while connected.
|
||||
*/
|
||||
if (!bss)
|
||||
goto out;
|
||||
} else if (wdev->conn) {
|
||||
cfg80211_sme_failed_assoc(wdev);
|
||||
/*
|
||||
|
@@ -601,7 +601,7 @@ int cfg80211_wext_siwscan(struct net_device *dev,
|
||||
struct cfg80211_registered_device *rdev;
|
||||
struct wiphy *wiphy;
|
||||
struct iw_scan_req *wreq = NULL;
|
||||
struct cfg80211_scan_request *creq;
|
||||
struct cfg80211_scan_request *creq = NULL;
|
||||
int i, err, n_channels = 0;
|
||||
enum ieee80211_band band;
|
||||
|
||||
@@ -694,8 +694,10 @@ int cfg80211_wext_siwscan(struct net_device *dev,
|
||||
/* translate "Scan for SSID" request */
|
||||
if (wreq) {
|
||||
if (wrqu->data.flags & IW_SCAN_THIS_ESSID) {
|
||||
if (wreq->essid_len > IEEE80211_MAX_SSID_LEN)
|
||||
return -EINVAL;
|
||||
if (wreq->essid_len > IEEE80211_MAX_SSID_LEN) {
|
||||
err = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
memcpy(creq->ssids[0].ssid, wreq->essid, wreq->essid_len);
|
||||
creq->ssids[0].ssid_len = wreq->essid_len;
|
||||
}
|
||||
@@ -707,12 +709,15 @@ int cfg80211_wext_siwscan(struct net_device *dev,
|
||||
err = rdev->ops->scan(wiphy, dev, creq);
|
||||
if (err) {
|
||||
rdev->scan_req = NULL;
|
||||
kfree(creq);
|
||||
/* creq will be freed below */
|
||||
} else {
|
||||
nl80211_send_scan_start(rdev, dev);
|
||||
/* creq now owned by driver */
|
||||
creq = NULL;
|
||||
dev_hold(dev);
|
||||
}
|
||||
out:
|
||||
kfree(creq);
|
||||
cfg80211_unlock_rdev(rdev);
|
||||
return err;
|
||||
}
|
||||
|
Reference in New Issue
Block a user