| From e108828b3c2ff032b0cfff28eae9687b2a61adb8 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Thu, 23 Aug 2018 14:47:07 +0300 |
| Subject: wil6210: drop Rx multicast packets that are looped-back to STA |
| |
| From: Dedy Lansky <dlansky@codeaurora.org> |
| |
| [ Upstream commit 9a65064abdf82934e0ed4744125f9f466f421f57 ] |
| |
| 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> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/net/wireless/ath/wil6210/txrx.c | 9 ++++++++- |
| 1 file changed, 8 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/net/wireless/ath/wil6210/txrx.c b/drivers/net/wireless/ath/wil6210/txrx.c |
| index 1b1b58e0129a3..25a65ca424c84 100644 |
| --- a/drivers/net/wireless/ath/wil6210/txrx.c |
| +++ b/drivers/net/wireless/ath/wil6210/txrx.c |
| @@ -766,7 +766,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 |
| -- |
| 2.20.1 |
| |