mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
wifi: nl80211: move WPA version validation to policy
For a contiguous mask (starting with bit 0) of allowed values in a bitmap, it's equivalent to check "!(val & ~mask)" and "val ∈ [0, mask]". Use that to move the WPA versions check to the policy, for better error reporting. Reviewed-by: Jeff Johnson <quic_jjohnson@quicinc.com> Link: https://msgid.link/20240129195421.e8cae9866ccb.I2539b395e3476307d702c6867e51a937e52e57a0@changeid Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
392d3dfdfd
commit
57d1b4632e
1 changed files with 7 additions and 13 deletions
|
@ -5,7 +5,7 @@
|
|||
* Copyright 2006-2010 Johannes Berg <johannes@sipsolutions.net>
|
||||
* Copyright 2013-2014 Intel Mobile Communications GmbH
|
||||
* Copyright 2015-2017 Intel Deutschland GmbH
|
||||
* Copyright (C) 2018-2023 Intel Corporation
|
||||
* Copyright (C) 2018-2024 Intel Corporation
|
||||
*/
|
||||
|
||||
#include <linux/if.h>
|
||||
|
@ -581,7 +581,11 @@ static const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = {
|
|||
[NL80211_ATTR_PRIVACY] = { .type = NLA_FLAG },
|
||||
[NL80211_ATTR_STATUS_CODE] = { .type = NLA_U16 },
|
||||
[NL80211_ATTR_CIPHER_SUITE_GROUP] = { .type = NLA_U32 },
|
||||
[NL80211_ATTR_WPA_VERSIONS] = { .type = NLA_U32 },
|
||||
[NL80211_ATTR_WPA_VERSIONS] =
|
||||
NLA_POLICY_RANGE(NLA_U32, 0,
|
||||
NL80211_WPA_VERSION_1 |
|
||||
NL80211_WPA_VERSION_2 |
|
||||
NL80211_WPA_VERSION_3),
|
||||
[NL80211_ATTR_PID] = { .type = NLA_U32 },
|
||||
[NL80211_ATTR_4ADDR] = { .type = NLA_U8 },
|
||||
[NL80211_ATTR_PMKID] = NLA_POLICY_EXACT_LEN_WARN(WLAN_PMKID_LEN),
|
||||
|
@ -10604,13 +10608,6 @@ static int nl80211_dump_survey(struct sk_buff *skb, struct netlink_callback *cb)
|
|||
return res;
|
||||
}
|
||||
|
||||
static bool nl80211_valid_wpa_versions(u32 wpa_versions)
|
||||
{
|
||||
return !(wpa_versions & ~(NL80211_WPA_VERSION_1 |
|
||||
NL80211_WPA_VERSION_2 |
|
||||
NL80211_WPA_VERSION_3));
|
||||
}
|
||||
|
||||
static int nl80211_authenticate(struct sk_buff *skb, struct genl_info *info)
|
||||
{
|
||||
struct cfg80211_registered_device *rdev = info->user_ptr[0];
|
||||
|
@ -10836,12 +10833,9 @@ static int nl80211_crypto_settings(struct cfg80211_registered_device *rdev,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (info->attrs[NL80211_ATTR_WPA_VERSIONS]) {
|
||||
if (info->attrs[NL80211_ATTR_WPA_VERSIONS])
|
||||
settings->wpa_versions =
|
||||
nla_get_u32(info->attrs[NL80211_ATTR_WPA_VERSIONS]);
|
||||
if (!nl80211_valid_wpa_versions(settings->wpa_versions))
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (info->attrs[NL80211_ATTR_AKM_SUITES]) {
|
||||
void *data;
|
||||
|
|
Loading…
Add table
Reference in a new issue