lkml.org 
[lkml]   [2017]   [Feb]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH 3.2 042/126] mac80211: discard multicast and 4-addr A-MSDUs
    3.2.85-rc1 review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Johannes Berg <johannes.berg@intel.com>

    commit ea720935cf6686f72def9d322298bf7e9bd53377 upstream.

    In mac80211, multicast A-MSDUs are accepted in many cases that
    they shouldn't be accepted in:
    * drop A-MSDUs with a multicast A1 (RA), as required by the
    spec in 9.11 (802.11-2012 version)
    * drop A-MSDUs with a 4-addr header, since the fourth address
    can't actually be useful for them; unless 4-address frame
    format is actually requested, even though the fourth address
    is still not useful in this case, but ignored

    Accepting the first case, in particular, is very problematic
    since it allows anyone else with possession of a GTK to send
    unicast frames encapsulated in a multicast A-MSDU, even when
    the AP has client isolation enabled.

    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    ---
    net/mac80211/rx.c | 24 +++++++++++++++---------
    1 file changed, 15 insertions(+), 9 deletions(-)

    --- a/net/mac80211/rx.c
    +++ b/net/mac80211/rx.c
    @@ -1854,16 +1854,22 @@ ieee80211_rx_h_amsdu(struct ieee80211_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;
    \
     
     \ /
      Last update: 2017-02-16 00:05    [W:3.304 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site