aboutsummaryrefslogtreecommitdiffstats
path: root/net/wireless/util.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/util.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/util.c')
-rw-r--r--net/wireless/util.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/net/wireless/util.c b/net/wireless/util.c
index 39dbf4ad7ca1..6304ed63588a 100644
--- a/net/wireless/util.c
+++ b/net/wireless/util.c
@@ -151,12 +151,19 @@ void ieee80211_set_bitrate_flags(struct wiphy *wiphy)
151 set_mandatory_flags_band(wiphy->bands[band], band); 151 set_mandatory_flags_band(wiphy->bands[band], band);
152} 152}
153 153
154bool cfg80211_supported_cipher_suite(struct wiphy *wiphy, u32 cipher)
155{
156 int i;
157 for (i = 0; i < wiphy->n_cipher_suites; i++)
158 if (cipher == wiphy->cipher_suites[i])
159 return true;
160 return false;
161}
162
154int cfg80211_validate_key_settings(struct cfg80211_registered_device *rdev, 163int cfg80211_validate_key_settings(struct cfg80211_registered_device *rdev,
155 struct key_params *params, int key_idx, 164 struct key_params *params, int key_idx,
156 bool pairwise, const u8 *mac_addr) 165 bool pairwise, const u8 *mac_addr)
157{ 166{
158 int i;
159
160 if (key_idx > 5) 167 if (key_idx > 5)
161 return -EINVAL; 168 return -EINVAL;
162 169
@@ -226,10 +233,7 @@ int cfg80211_validate_key_settings(struct cfg80211_registered_device *rdev,
226 } 233 }
227 } 234 }
228 235
229 for (i = 0; i < rdev->wiphy.n_cipher_suites; i++) 236 if (!cfg80211_supported_cipher_suite(&rdev->wiphy, params->cipher))
230 if (params->cipher == rdev->wiphy.cipher_suites[i])
231 break;
232 if (i == rdev->wiphy.n_cipher_suites)
233 return -EINVAL; 237 return -EINVAL;
234 238
235 return 0; 239 return 0;