|
@@ -564,6 +564,7 @@ static int hns_nic_poll_rx_skb(struct hns_nic_ring_data *ring_data,
|
|
|
struct sk_buff *skb;
|
|
|
struct hnae_desc *desc;
|
|
|
struct hnae_desc_cb *desc_cb;
|
|
|
+ struct ethhdr *eh;
|
|
|
unsigned char *va;
|
|
|
int bnum, length, i;
|
|
|
int pull_len;
|
|
@@ -670,6 +671,14 @@ out_bnum_err:
|
|
|
return -EFAULT;
|
|
|
}
|
|
|
|
|
|
+ /* filter out multicast pkt with the same src mac as this port */
|
|
|
+ eh = eth_hdr(skb);
|
|
|
+ if (unlikely(is_multicast_ether_addr(eh->h_dest) &&
|
|
|
+ ether_addr_equal(ndev->dev_addr, eh->h_source))) {
|
|
|
+ dev_kfree_skb_any(skb);
|
|
|
+ return -EFAULT;
|
|
|
+ }
|
|
|
+
|
|
|
ring->stats.rx_pkts++;
|
|
|
ring->stats.rx_bytes += skb->len;
|
|
|
|