aboutsummaryrefslogtreecommitdiffstats
path: root/net/wireless/nl80211.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/wireless/nl80211.c')
-rw-r--r--net/wireless/nl80211.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 080fd470fdec..fbb63d3ddc78 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -178,6 +178,7 @@ static const struct nla_policy nl80211_policy[NL80211_ATTR_MAX+1] = {
178 [NL80211_ATTR_SCHED_SCAN_INTERVAL] = { .type = NLA_U32 }, 178 [NL80211_ATTR_SCHED_SCAN_INTERVAL] = { .type = NLA_U32 },
179 [NL80211_ATTR_REKEY_DATA] = { .type = NLA_NESTED }, 179 [NL80211_ATTR_REKEY_DATA] = { .type = NLA_NESTED },
180 [NL80211_ATTR_SCAN_SUPP_RATES] = { .type = NLA_NESTED }, 180 [NL80211_ATTR_SCAN_SUPP_RATES] = { .type = NLA_NESTED },
181 [NL80211_ATTR_HIDDEN_SSID] = { .type = NLA_U32 },
181}; 182};
182 183
183/* policy for the key attributes */ 184/* policy for the key attributes */
@@ -2010,6 +2011,34 @@ static int nl80211_addset_beacon(struct sk_buff *skb, struct genl_info *info)
2010 if (err) 2011 if (err)
2011 return err; 2012 return err;
2012 2013
2014 /*
2015 * In theory, some of these attributes could be required for
2016 * NEW_BEACON, but since they were not used when the command was
2017 * originally added, keep them optional for old user space
2018 * programs to work with drivers that do not need the additional
2019 * information.
2020 */
2021 if (info->attrs[NL80211_ATTR_SSID]) {
2022 params.ssid = nla_data(info->attrs[NL80211_ATTR_SSID]);
2023 params.ssid_len =
2024 nla_len(info->attrs[NL80211_ATTR_SSID]);
2025 if (params.ssid_len == 0 ||
2026 params.ssid_len > IEEE80211_MAX_SSID_LEN)
2027 return -EINVAL;
2028 }
2029
2030 if (info->attrs[NL80211_ATTR_HIDDEN_SSID]) {
2031 params.hidden_ssid = nla_get_u32(
2032 info->attrs[NL80211_ATTR_HIDDEN_SSID]);
2033 if (params.hidden_ssid !=
2034 NL80211_HIDDEN_SSID_NOT_IN_USE &&
2035 params.hidden_ssid !=
2036 NL80211_HIDDEN_SSID_ZERO_LEN &&
2037 params.hidden_ssid !=
2038 NL80211_HIDDEN_SSID_ZERO_CONTENTS)
2039 return -EINVAL;
2040 }
2041
2013 call = rdev->ops->add_beacon; 2042 call = rdev->ops->add_beacon;
2014 break; 2043 break;
2015 case NL80211_CMD_SET_BEACON: 2044 case NL80211_CMD_SET_BEACON: