diff --git a/[refs] b/[refs] index a325e6c14ea8..91c6dd32d7d7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b22052569657925d6de33b19b2c7b7562900defb +refs/heads/master: 7d185b8bb17eac9e9d673eb483ded0fbf0b28b97 diff --git a/trunk/net/mac80211/tx.c b/trunk/net/mac80211/tx.c index 67b509edd431..85d01646abf5 100644 --- a/trunk/net/mac80211/tx.c +++ b/trunk/net/mac80211/tx.c @@ -1409,10 +1409,17 @@ int ieee80211_subif_start_xmit(struct sk_buff *skb, goto fail; } - sta = sta_info_get(local, hdr.addr1); - if (sta) { - sta_flags = sta->flags; - sta_info_put(sta); + /* + * There's no need to try to look up the destination + * if it is a multicast address (which can only happen + * in AP mode) + */ + if (!is_multicast_ether_addr(hdr.addr1)) { + sta = sta_info_get(local, hdr.addr1); + if (sta) { + sta_flags = sta->flags; + sta_info_put(sta); + } } /* receiver is QoS enabled, use a QoS type frame */ @@ -1422,10 +1429,12 @@ int ieee80211_subif_start_xmit(struct sk_buff *skb, } /* - * If port access control is enabled, drop frames to unauthorised - * stations unless they are EAPOL frames from the local station. + * If port access control is enabled, drop unicast frames to + * unauthorised stations unless they are EAPOL frames from the + * local station. */ if (unlikely(sdata->ieee802_1x_pac && + !is_multicast_ether_addr(hdr.addr1) && !(sta_flags & WLAN_STA_AUTHORIZED) && !(ethertype == ETH_P_PAE && compare_ether_addr(dev->dev_addr,