aboutsummaryrefslogtreecommitdiffstats
path: root/net/wireless/nl80211.c
diff options
context:
space:
mode:
authorJouni Malinen <jouni@qca.qualcomm.com>2011-09-21 11:14:56 -0400
committerJohn W. Linville <linville@tuxdriver.com>2011-09-27 14:29:54 -0400
commit38ba3c57af1c737966fb58bcbeecdc71f5f4fa90 (patch)
tree5c2539d3c2cf8e2d0728917ecc4227efcb5774b9 /net/wireless/nl80211.c
parent6d30240e3d68f1da7303801f840132d0821f1767 (diff)
cfg80211: Validate cipher suite against supported ciphers
Instead of using a hardcoded list of cipher suites in nl80211.c, use a shared function in util.c to verify that the driver advertises support for the specified cipher. This provides more accurate validation of the values and allows vendor-specific cipher suites to be added in drivers. Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/wireless/nl80211.c')
-rw-r--r--net/wireless/nl80211.c16
1 files changed, 4 insertions, 12 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 1722998f4984..a3e26951fd8b 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -4126,16 +4126,6 @@ static bool nl80211_valid_wpa_versions(u32 wpa_versions)
4126 NL80211_WPA_VERSION_2)); 4126 NL80211_WPA_VERSION_2));
4127} 4127}
4128 4128
4129static bool nl80211_valid_cipher_suite(u32 cipher)
4130{
4131 return cipher == WLAN_CIPHER_SUITE_WEP40 ||
4132 cipher == WLAN_CIPHER_SUITE_WEP104 ||
4133 cipher == WLAN_CIPHER_SUITE_TKIP ||
4134 cipher == WLAN_CIPHER_SUITE_CCMP ||
4135 cipher == WLAN_CIPHER_SUITE_AES_CMAC;
4136}
4137
4138
4139static int nl80211_authenticate(struct sk_buff *skb, struct genl_info *info) 4129static int nl80211_authenticate(struct sk_buff *skb, struct genl_info *info)
4140{ 4130{
4141 struct cfg80211_registered_device *rdev = info->user_ptr[0]; 4131 struct cfg80211_registered_device *rdev = info->user_ptr[0];
@@ -4268,7 +4258,8 @@ static int nl80211_crypto_settings(struct cfg80211_registered_device *rdev,
4268 memcpy(settings->ciphers_pairwise, data, len); 4258 memcpy(settings->ciphers_pairwise, data, len);
4269 4259
4270 for (i = 0; i < settings->n_ciphers_pairwise; i++) 4260 for (i = 0; i < settings->n_ciphers_pairwise; i++)
4271 if (!nl80211_valid_cipher_suite( 4261 if (!cfg80211_supported_cipher_suite(
4262 &rdev->wiphy,
4272 settings->ciphers_pairwise[i])) 4263 settings->ciphers_pairwise[i]))
4273 return -EINVAL; 4264 return -EINVAL;
4274 } 4265 }
@@ -4276,7 +4267,8 @@ static int nl80211_crypto_settings(struct cfg80211_registered_device *rdev,
4276 if (info->attrs[NL80211_ATTR_CIPHER_SUITE_GROUP]) { 4267 if (info->attrs[NL80211_ATTR_CIPHER_SUITE_GROUP]) {
4277 settings->cipher_group = 4268 settings->cipher_group =
4278 nla_get_u32(info->attrs[NL80211_ATTR_CIPHER_SUITE_GROUP]); 4269 nla_get_u32(info->attrs[NL80211_ATTR_CIPHER_SUITE_GROUP]);
4279 if (!nl80211_valid_cipher_suite(settings->cipher_group)) 4270 if (!cfg80211_supported_cipher_suite(&rdev->wiphy,
4271 settings->cipher_group))
4280 return -EINVAL; 4272 return -EINVAL;
4281 } 4273 }
4282 4274