diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2017-01-17 17:18:15 -0800 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-01-17 17:18:15 -0800 |
| commit | 181f9f34cb6babfaf19014d5419fffa6f040d195 (patch) | |
| tree | 6f482308b8dcd47514a7297626e6a610058e39b5 /net | |
| parent | f25c4b8235757eae8242496ed4515e8b226afb21 (diff) | |
| parent | addecbfb2b2d861f15d677943b168b90af8d5a4c (diff) | |
Merge "mac80211: discard multicast and 4-addr A-MSDUs"
Diffstat (limited to 'net')
| -rw-r--r-- | net/mac80211/rx.c | 24 |
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; |
