summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorDedy Lansky <dlansky@codeaurora.org>2018-08-23 14:47:07 +0300
committerKalle Valo <kvalo@codeaurora.org>2018-08-28 16:48:16 +0300
commit9a65064abdf82934e0ed4744125f9f466f421f57 (patch)
treeb993b92ea6886987c4ddf46ac2583e3d9027d04f /drivers
parent22b9610ec68716d664aac99cee6e65464cc6c922 (diff)
downloadlinux-9a65064abdf82934e0ed4744125f9f466f421f57.tar.bz2
wil6210: drop Rx multicast packets that are looped-back to STA
Delivering a looped-back multicast packet to network stack can cause higher layer protocols to fail like for example IPv6 DAD. In STA mode, upon receiving Rx multicast packet, check if the source MAC address is equal to our own MAC address and if so drop the packet. Signed-off-by: Dedy Lansky <dlansky@codeaurora.org> Signed-off-by: Maya Erez <merez@codeaurora.org> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/ath/wil6210/txrx.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/net/wireless/ath/wil6210/txrx.c b/drivers/net/wireless/ath/wil6210/txrx.c
index 6a7943e487fb..e7b003b38f45 100644
--- a/drivers/net/wireless/ath/wil6210/txrx.c
+++ b/drivers/net/wireless/ath/wil6210/txrx.c
@@ -765,7 +765,14 @@ void wil_netif_rx_any(struct sk_buff *skb, struct net_device *ndev)
return;
}
- if (wdev->iftype == NL80211_IFTYPE_AP && !vif->ap_isolate) {
+ if (wdev->iftype == NL80211_IFTYPE_STATION) {
+ if (mcast && ether_addr_equal(eth->h_source, ndev->dev_addr)) {
+ /* mcast packet looped back to us */
+ rc = GRO_DROP;
+ dev_kfree_skb(skb);
+ goto stats;
+ }
+ } else if (wdev->iftype == NL80211_IFTYPE_AP && !vif->ap_isolate) {
if (mcast) {
/* send multicast frames both to higher layers in
* local net stack and back to the wireless medium