diff options
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2x00mac.c')
| -rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00mac.c | 15 | 
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00mac.c b/drivers/net/wireless/rt2x00/rt2x00mac.c index b49773ef72f..4ff26c2159b 100644 --- a/drivers/net/wireless/rt2x00/rt2x00mac.c +++ b/drivers/net/wireless/rt2x00/rt2x00mac.c @@ -277,7 +277,6 @@ int rt2x00mac_add_interface(struct ieee80211_hw *hw,  	else  		rt2x00dev->intf_sta_count++; -	spin_lock_init(&intf->seqlock);  	mutex_init(&intf->beacon_skb_mutex);  	intf->beacon = entry; @@ -507,9 +506,19 @@ int rt2x00mac_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,  	if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags))  		return 0; -	else if (!test_bit(CAPABILITY_HW_CRYPTO, &rt2x00dev->cap_flags)) + +	if (!test_bit(CAPABILITY_HW_CRYPTO, &rt2x00dev->cap_flags)) +		return -EOPNOTSUPP; + +	/* +	 * To support IBSS RSN, don't program group keys in IBSS, the +	 * hardware will then not attempt to decrypt the frames. +	 */ +	if (vif->type == NL80211_IFTYPE_ADHOC && +	    !(key->flags & IEEE80211_KEY_FLAG_PAIRWISE))  		return -EOPNOTSUPP; -	else if (key->keylen > 32) + +	if (key->keylen > 32)  		return -ENOSPC;  	memset(&crypto, 0, sizeof(crypto));  |