summaryrefslogtreecommitdiffstats
path: root/net/tipc/bearer.c
diff options
context:
space:
mode:
authorJon Paul Maloy2017-08-14 17:55:56 +0200
committerDavid S. Miller2017-08-14 20:19:25 +0200
commitfed5f5718c4989a03b1b4cdc0c7f273c3c74ee9e (patch)
tree3a5661c469354024be78f0bd92eed38490d073b3 /net/tipc/bearer.c
parentipv4: route: fix inet_rtm_getroute induced crash (diff)
downloadkernel-qcow2-linux-fed5f5718c4989a03b1b4cdc0c7f273c3c74ee9e.tar.gz
kernel-qcow2-linux-fed5f5718c4989a03b1b4cdc0c7f273c3c74ee9e.tar.xz
kernel-qcow2-linux-fed5f5718c4989a03b1b4cdc0c7f273c3c74ee9e.zip
tipc: accept PACKET_MULTICAST packets
On L2 bearers, the TIPC broadcast function is sending out packets using the corresponding L2 broadcast address. At reception, we filter such packets under the assumption that they will also be delivered as broadcast packets. This assumption doesn't always hold true. Under high load, we have seen that a switch may convert the destination address and deliver the packet as a PACKET_MULTICAST, something leading to inadvertently dropped packets and a stale and reset broadcast link. We fix this by extending the reception filtering to accept packets of type PACKET_MULTICAST. Signed-off-by: Jon Maloy <jon.maloy@ericsson.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc/bearer.c')
-rw-r--r--net/tipc/bearer.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c
index d174ee3254ee..767e0537dde5 100644
--- a/net/tipc/bearer.c
+++ b/net/tipc/bearer.c
@@ -596,7 +596,7 @@ static int tipc_l2_rcv_msg(struct sk_buff *skb, struct net_device *dev,
rcu_read_lock();
b = rcu_dereference_rtnl(dev->tipc_ptr);
if (likely(b && test_bit(0, &b->up) &&
- (skb->pkt_type <= PACKET_BROADCAST))) {
+ (skb->pkt_type <= PACKET_MULTICAST))) {
skb->next = NULL;
tipc_rcv(dev_net(dev), skb, b);
rcu_read_unlock();