diff options
Diffstat (limited to 'net/wireless/mlme.c')
| -rw-r--r-- | net/wireless/mlme.c | 16 | 
1 files changed, 9 insertions, 7 deletions
diff --git a/net/wireless/mlme.c b/net/wireless/mlme.c index 48ead6f0426..e74a1a2119d 100644 --- a/net/wireless/mlme.c +++ b/net/wireless/mlme.c @@ -44,10 +44,10 @@ void cfg80211_send_rx_auth(struct net_device *dev, const u8 *buf, size_t len)  		}  	} -	WARN_ON(!done); - -	nl80211_send_rx_auth(rdev, dev, buf, len, GFP_KERNEL); -	cfg80211_sme_rx_auth(dev, buf, len); +	if (done) { +		nl80211_send_rx_auth(rdev, dev, buf, len, GFP_KERNEL); +		cfg80211_sme_rx_auth(dev, buf, len); +	}  	wdev_unlock(wdev);  } @@ -827,6 +827,7 @@ int cfg80211_mlme_action(struct cfg80211_registered_device *rdev,  			 struct net_device *dev,  			 struct ieee80211_channel *chan,  			 enum nl80211_channel_type channel_type, +			 bool channel_type_valid,  			 const u8 *buf, size_t len, u64 *cookie)  {  	struct wireless_dev *wdev = dev->ieee80211_ptr; @@ -845,8 +846,9 @@ int cfg80211_mlme_action(struct cfg80211_registered_device *rdev,  		if (!wdev->current_bss ||  		    memcmp(wdev->current_bss->pub.bssid, mgmt->bssid,  			   ETH_ALEN) != 0 || -		    memcmp(wdev->current_bss->pub.bssid, mgmt->da, -			   ETH_ALEN) != 0) +		    (wdev->iftype == NL80211_IFTYPE_STATION && +		     memcmp(wdev->current_bss->pub.bssid, mgmt->da, +			    ETH_ALEN) != 0))  			return -ENOTCONN;  	} @@ -855,7 +857,7 @@ int cfg80211_mlme_action(struct cfg80211_registered_device *rdev,  	/* Transmit the Action frame as requested by user space */  	return rdev->ops->action(&rdev->wiphy, dev, chan, channel_type, -				 buf, len, cookie); +				 channel_type_valid, buf, len, cookie);  }  bool cfg80211_rx_action(struct net_device *dev, int freq, const u8 *buf,  |