summaryrefslogtreecommitdiff
path: root/net/dsa/tag_lan9303.c
diff options
context:
space:
mode:
authorAndrew Lunn <andrew@lunn.ch>2018-04-07 20:37:40 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2018-04-24 09:36:39 +0200
commit30593709f80ddf23a3e8b41f3a7edfc68c4786be (patch)
tree8025231ce002bff05766db48fbabef1d1ca5e0b6 /net/dsa/tag_lan9303.c
parent90a32d1f0ec9844b7984f52f07fe7bcb0abfb6a7 (diff)
net: dsa: Discard frames from unused ports
commit fc5f33768cca7144f8d793205b229d46740d183b upstream. The Marvell switches under some conditions will pass a frame to the host with the port being the CPU port. Such frames are invalid, and should be dropped. Not dropping them can result in a crash when incrementing the receive statistics for an invalid port. This has been reworked for 4.14, which does not have the central dsa_master_find_slave() function, so each tag driver needs to check. Reported-by: Chris Healy <cphealy@gmail.com> Fixes: 91da11f870f0 ("net: Distributed Switch Architecture protocol support") Signed-off-by: Andrew Lunn <andrew@lunn.ch> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'net/dsa/tag_lan9303.c')
-rw-r--r--net/dsa/tag_lan9303.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/net/dsa/tag_lan9303.c b/net/dsa/tag_lan9303.c
index 0b9826105e42..2d1603009e16 100644
--- a/net/dsa/tag_lan9303.c
+++ b/net/dsa/tag_lan9303.c
@@ -108,6 +108,9 @@ static struct sk_buff *lan9303_rcv(struct sk_buff *skb, struct net_device *dev,
return NULL;
}
+ if (unlikely(ds->cpu_port_mask & BIT(source_port)))
+ return NULL;
+
if (!ds->ports[source_port].netdev) {
dev_warn_ratelimited(&dev->dev, "Dropping packet due to invalid netdev or device\n");
return NULL;