cfg80211: Allow reassociation to be requested with internal SME
If the user space issues a NL80211_CMD_CONNECT with NL80211_ATTR_PREV_BSSID when there is already a connection, allow this to proceed as a reassociation instead of rejecting the new connect command with EALREADY. Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com> [validate prev_bssid] Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
		
							parent
							
								
									ba6fbacf9c
								
							
						
					
					
						commit
						4ce2bd9c4c
					
				| @ -8151,7 +8151,8 @@ static int nl80211_connect(struct sk_buff *skb, struct genl_info *info) | ||||
| 	} | ||||
| 
 | ||||
| 	wdev_lock(dev->ieee80211_ptr); | ||||
| 	err = cfg80211_connect(rdev, dev, &connect, connkeys, NULL); | ||||
| 	err = cfg80211_connect(rdev, dev, &connect, connkeys, | ||||
| 			       connect.prev_bssid); | ||||
| 	wdev_unlock(dev->ieee80211_ptr); | ||||
| 	if (err) | ||||
| 		kzfree(connkeys); | ||||
|  | ||||
| @ -492,8 +492,18 @@ static int cfg80211_sme_connect(struct wireless_dev *wdev, | ||||
| 	if (!rdev->ops->auth || !rdev->ops->assoc) | ||||
| 		return -EOPNOTSUPP; | ||||
| 
 | ||||
| 	if (wdev->current_bss) | ||||
| 		return -EALREADY; | ||||
| 	if (wdev->current_bss) { | ||||
| 		if (!prev_bssid) | ||||
| 			return -EALREADY; | ||||
| 		if (prev_bssid && | ||||
| 		    !ether_addr_equal(prev_bssid, wdev->current_bss->pub.bssid)) | ||||
| 			return -ENOTCONN; | ||||
| 		cfg80211_unhold_bss(wdev->current_bss); | ||||
| 		cfg80211_put_bss(wdev->wiphy, &wdev->current_bss->pub); | ||||
| 		wdev->current_bss = NULL; | ||||
| 
 | ||||
| 		cfg80211_sme_free(wdev); | ||||
| 	} | ||||
| 
 | ||||
| 	if (WARN_ON(wdev->conn)) | ||||
| 		return -EINPROGRESS; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user