aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211/tx.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/mac80211/tx.c')
-rw-r--r--net/mac80211/tx.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 67b509edd431..85d01646abf5 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -1409,10 +1409,17 @@ int ieee80211_subif_start_xmit(struct sk_buff *skb,
1409 goto fail; 1409 goto fail;
1410 } 1410 }
1411 1411
1412 sta = sta_info_get(local, hdr.addr1); 1412 /*
1413 if (sta) { 1413 * There's no need to try to look up the destination
1414 sta_flags = sta->flags; 1414 * if it is a multicast address (which can only happen
1415 sta_info_put(sta); 1415 * in AP mode)
1416 */
1417 if (!is_multicast_ether_addr(hdr.addr1)) {
1418 sta = sta_info_get(local, hdr.addr1);
1419 if (sta) {
1420 sta_flags = sta->flags;
1421 sta_info_put(sta);
1422 }
1416 } 1423 }
1417 1424
1418 /* receiver is QoS enabled, use a QoS type frame */ 1425 /* receiver is QoS enabled, use a QoS type frame */
@@ -1422,10 +1429,12 @@ int ieee80211_subif_start_xmit(struct sk_buff *skb,
1422 } 1429 }
1423 1430
1424 /* 1431 /*
1425 * If port access control is enabled, drop frames to unauthorised 1432 * If port access control is enabled, drop unicast frames to
1426 * stations unless they are EAPOL frames from the local station. 1433 * unauthorised stations unless they are EAPOL frames from the
1434 * local station.
1427 */ 1435 */
1428 if (unlikely(sdata->ieee802_1x_pac && 1436 if (unlikely(sdata->ieee802_1x_pac &&
1437 !is_multicast_ether_addr(hdr.addr1) &&
1429 !(sta_flags & WLAN_STA_AUTHORIZED) && 1438 !(sta_flags & WLAN_STA_AUTHORIZED) &&
1430 !(ethertype == ETH_P_PAE && 1439 !(ethertype == ETH_P_PAE &&
1431 compare_ether_addr(dev->dev_addr, 1440 compare_ether_addr(dev->dev_addr,