Skip to content

Commit

Permalink
nl80211: limit to one pairwise cipher for associate()
Browse files Browse the repository at this point in the history
In this case, only one cipher makes sense, unlike for
connect() where it may be possible to have the card or
driver select.

No changes to mac80211 due to the way the structs are
laid out -- but the loop in net/mac80211/cfg.c will
degrade to just zero or one passes.

Signed-off-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Johannes Berg authored and John W. Linville committed Jul 10, 2009
1 parent 4244f41 commit 3dc27d2
Showing 1 changed file with 6 additions and 4 deletions.
10 changes: 6 additions & 4 deletions net/wireless/nl80211.c
Original file line number Diff line number Diff line change
Expand Up @@ -3119,7 +3119,8 @@ static int nl80211_authenticate(struct sk_buff *skb, struct genl_info *info)
}

static int nl80211_crypto_settings(struct genl_info *info,
struct cfg80211_crypto_settings *settings)
struct cfg80211_crypto_settings *settings,
int cipher_limit)
{
settings->control_port = info->attrs[NL80211_ATTR_CONTROL_PORT];

Expand All @@ -3134,7 +3135,7 @@ static int nl80211_crypto_settings(struct genl_info *info,
if (len % sizeof(u32))
return -EINVAL;

if (settings->n_ciphers_pairwise > NL80211_MAX_NR_CIPHER_SUITES)
if (settings->n_ciphers_pairwise > cipher_limit)
return -EINVAL;

memcpy(settings->ciphers_pairwise, data, len);
Expand Down Expand Up @@ -3247,7 +3248,7 @@ static int nl80211_associate(struct sk_buff *skb, struct genl_info *info)
}
}

err = nl80211_crypto_settings(info, &crypto);
err = nl80211_crypto_settings(info, &crypto, 1);
if (!err)
err = cfg80211_mlme_assoc(rdev, dev, chan, bssid, ssid,
ssid_len, ie, ie_len, use_mfp,
Expand Down Expand Up @@ -3652,7 +3653,8 @@ static int nl80211_connect(struct sk_buff *skb, struct genl_info *info)

connect.privacy = info->attrs[NL80211_ATTR_PRIVACY];

err = nl80211_crypto_settings(info, &connect.crypto);
err = nl80211_crypto_settings(info, &connect.crypto,
NL80211_MAX_NR_CIPHER_SUITES);
if (err)
return err;
rtnl_lock();
Expand Down

0 comments on commit 3dc27d2

Please sign in to comment.