Within cfg80211_connect, reject the (re-)association request if we are already connected to the exact BSSID which is being requested. This prevents an unnecessary attempt to connect which in the best case leaves us back where we started. There is precedent for behaving this way over on the userspace SME side of things in cfg80211_mlme_auth. Further, cfg80211_connect already makes several basic checks to ensure the connection attempt is reasonable, so this fits in that context. Signed-off-by: Kevin Lund <kglund@xxxxxxxxxx> --- net/wireless/sme.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/net/wireless/sme.c b/net/wireless/sme.c index 7bdeb8eea92dc..8f88e66bc85fc 100644 --- a/net/wireless/sme.c +++ b/net/wireless/sme.c @@ -1442,7 +1442,8 @@ int cfg80211_connect(struct cfg80211_registered_device *rdev, /* * If connected, reject (re-)association unless prev_bssid - * matches the current BSSID. + * matches the current BSSID. Also reject if the current BSSID matches + * the desired BSSID. */ if (wdev->connected) { if (!prev_bssid) @@ -1450,6 +1451,9 @@ int cfg80211_connect(struct cfg80211_registered_device *rdev, if (!ether_addr_equal(prev_bssid, wdev->u.client.connected_addr)) return -ENOTCONN; + if (ether_addr_equal(wdev->current_bss->pub.bssid, + connect->bssid)) + return -EALREADY; } /* -- 2.39.2