|
@@ -227,18 +227,26 @@ int cfg80211_validate_key_settings(struct cfg80211_registered_device *rdev,
|
|
|
if (pairwise && !mac_addr)
|
|
|
return -EINVAL;
|
|
|
|
|
|
- /*
|
|
|
- * Disallow pairwise keys with non-zero index unless it's WEP
|
|
|
- * or a vendor specific cipher (because current deployments use
|
|
|
- * pairwise WEP keys with non-zero indices and for vendor specific
|
|
|
- * ciphers this should be validated in the driver or hardware level
|
|
|
- * - but 802.11i clearly specifies to use zero)
|
|
|
- */
|
|
|
- if (pairwise && key_idx &&
|
|
|
- ((params->cipher == WLAN_CIPHER_SUITE_TKIP) ||
|
|
|
- (params->cipher == WLAN_CIPHER_SUITE_CCMP) ||
|
|
|
- (params->cipher == WLAN_CIPHER_SUITE_AES_CMAC)))
|
|
|
- return -EINVAL;
|
|
|
+ switch (params->cipher) {
|
|
|
+ case WLAN_CIPHER_SUITE_TKIP:
|
|
|
+ case WLAN_CIPHER_SUITE_CCMP:
|
|
|
+ /* Disallow pairwise keys with non-zero index unless it's WEP
|
|
|
+ * or a vendor specific cipher (because current deployments use
|
|
|
+ * pairwise WEP keys with non-zero indices and for vendor
|
|
|
+ * specific ciphers this should be validated in the driver or
|
|
|
+ * hardware level - but 802.11i clearly specifies to use zero)
|
|
|
+ */
|
|
|
+ if (pairwise && key_idx)
|
|
|
+ return -EINVAL;
|
|
|
+ break;
|
|
|
+ case WLAN_CIPHER_SUITE_AES_CMAC:
|
|
|
+ /* Disallow BIP (group-only) cipher as pairwise cipher */
|
|
|
+ if (pairwise)
|
|
|
+ return -EINVAL;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ break;
|
|
|
+ }
|
|
|
|
|
|
switch (params->cipher) {
|
|
|
case WLAN_CIPHER_SUITE_WEP40:
|