Skip to content

Commit

Permalink
cfg80211: don't request disconnect if not connected
Browse files Browse the repository at this point in the history
Neil Brown reports that with libertas, my recent cfg80211
SME changes in commit ceca7b7
("cfg80211: separate internal SME implementation") broke
libertas suspend because it we now asked it to disconnect
while already disconnected.

The problematic change is in cfg80211_disconnect() as it
previously checked the SME state and now calls the driver
disconnect operation unconditionally.

Fix this by checking if there's a current_bss indicating
a connection, and do nothing if not.

Reported-and-tested-by: Neil Brown <neilb@suse.de>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  • Loading branch information
Johannes Berg committed Aug 14, 2013
1 parent cb35fba commit dee8a97
Showing 1 changed file with 4 additions and 6 deletions.
10 changes: 4 additions & 6 deletions net/wireless/sme.c
Original file line number Diff line number Diff line change
Expand Up @@ -976,21 +976,19 @@ int cfg80211_disconnect(struct cfg80211_registered_device *rdev,
struct net_device *dev, u16 reason, bool wextev)
{
struct wireless_dev *wdev = dev->ieee80211_ptr;
int err;
int err = 0;

ASSERT_WDEV_LOCK(wdev);

kfree(wdev->connect_keys);
wdev->connect_keys = NULL;

if (wdev->conn) {
if (wdev->conn)
err = cfg80211_sme_disconnect(wdev, reason);
} else if (!rdev->ops->disconnect) {
else if (!rdev->ops->disconnect)
cfg80211_mlme_down(rdev, dev);
err = 0;
} else {
else if (wdev->current_bss)
err = rdev_disconnect(rdev, dev, reason);
}

return err;
}

0 comments on commit dee8a97

Please sign in to comment.