summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2017-01-17 17:18:15 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2017-01-17 17:18:15 -0800
commit181f9f34cb6babfaf19014d5419fffa6f040d195 (patch)
tree6f482308b8dcd47514a7297626e6a610058e39b5 /net
parentf25c4b8235757eae8242496ed4515e8b226afb21 (diff)
parentaddecbfb2b2d861f15d677943b168b90af8d5a4c (diff)
Merge "mac80211: discard multicast and 4-addr A-MSDUs"
Diffstat (limited to 'net')
-rw-r--r--net/mac80211/rx.c24
1 files changed, 15 insertions, 9 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 90678971e4ed..5e2adf622b1e 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -2204,16 +2204,22 @@ ieee80211_rx_h_amsdu(struct ieee80211_rx_data *rx)
if (!(status->rx_flags & IEEE80211_RX_AMSDU))
return RX_CONTINUE;
- if (ieee80211_has_a4(hdr->frame_control) &&
- rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
- !rx->sdata->u.vlan.sta)
- return RX_DROP_UNUSABLE;
+ if (unlikely(ieee80211_has_a4(hdr->frame_control))) {
+ switch (rx->sdata->vif.type) {
+ case NL80211_IFTYPE_AP_VLAN:
+ if (!rx->sdata->u.vlan.sta)
+ return RX_DROP_UNUSABLE;
+ break;
+ case NL80211_IFTYPE_STATION:
+ if (!rx->sdata->u.mgd.use_4addr)
+ return RX_DROP_UNUSABLE;
+ break;
+ default:
+ return RX_DROP_UNUSABLE;
+ }
+ }
- if (is_multicast_ether_addr(hdr->addr1) &&
- ((rx->sdata->vif.type == NL80211_IFTYPE_AP_VLAN &&
- rx->sdata->u.vlan.sta) ||
- (rx->sdata->vif.type == NL80211_IFTYPE_STATION &&
- rx->sdata->u.mgd.use_4addr)))
+ if (is_multicast_ether_addr(hdr->addr1))
return RX_DROP_UNUSABLE;
skb->dev = dev;