summaryrefslogtreecommitdiffstats
path: root/net/wireless
diff options
context:
space:
mode:
authorJohannes Berg <johannes.berg@intel.com>2011-09-07 11:50:48 +0200
committerJohn W. Linville <linville@tuxdriver.com>2011-09-14 13:56:43 -0400
commit4319e193271dc93241338eb0173fc26dc6c35465 (patch)
treefd8c4c1ae175f4404c26e41b43e1667d498e33ee /net/wireless
parentff620849110649b5f94989ddfd7a72b2bd43bd42 (diff)
downloadlinux-4319e193271dc93241338eb0173fc26dc6c35465.tar.bz2
cfg80211: verify format of uAPSD information
The format is intended to be like the subfields in the QoS Info field, verify that is the case. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/wireless')
-rw-r--r--net/wireless/nl80211.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index f4cfd3abfbfd..11089541bb03 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -2627,10 +2627,15 @@ static int nl80211_new_station(struct sk_buff *skb, struct genl_info *info)
if (tb[NL80211_STA_WME_UAPSD_QUEUES])
params.uapsd_queues =
nla_get_u8(tb[NL80211_STA_WME_UAPSD_QUEUES]);
+ if (params.uapsd_queues & ~IEEE80211_WMM_IE_STA_QOSINFO_AC_MASK)
+ return -EINVAL;
if (tb[NL80211_STA_WME_MAX_SP])
params.max_sp =
nla_get_u8(tb[NL80211_STA_WME_MAX_SP]);
+
+ if (params.max_sp & ~IEEE80211_WMM_IE_STA_QOSINFO_SP_MASK)
+ return -EINVAL;
}
if (dev->ieee80211_ptr->iftype != NL80211_IFTYPE_AP &&