From patchwork Wed Apr 3 20:27:24 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nikolay Aleksandrov X-Patchwork-Id: 1076394 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=cumulusnetworks.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=cumulusnetworks.com header.i=@cumulusnetworks.com header.b="MbEV9pKk"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44ZHh62tNMz9sNR for ; Thu, 4 Apr 2019 07:27:50 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726451AbfDCU1l (ORCPT ); Wed, 3 Apr 2019 16:27:41 -0400 Received: from mail-wm1-f66.google.com ([209.85.128.66]:52304 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726099AbfDCU1l (ORCPT ); Wed, 3 Apr 2019 16:27:41 -0400 Received: by mail-wm1-f66.google.com with SMTP id a184so298126wma.2 for ; Wed, 03 Apr 2019 13:27:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cumulusnetworks.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=wbjytpqVM1azUm4OJXgXnJ449HyBBV7+wd2YY/jQrtc=; b=MbEV9pKkEAapyqDyJKEyPtg2W7cFz7UH6fbigeRBgj1hIg7Ylqom761nHCKIRd9G1U TlxJnxilN8MxdW6cjOkHAbmv859Vd8GWQDBPInE21iRb7u3OkQ8jHNV0RjnsnQTlB6SN N438QlK27ijDvWKZQ7jd4N5yII4+Y6+nvolec= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=wbjytpqVM1azUm4OJXgXnJ449HyBBV7+wd2YY/jQrtc=; b=aEs/YyUNz0/BoQOjBbHcE5kfy/a+qyZxnPpvyEtP4ThrNm2f/MX78/yb8T7DALjlO6 OpDQ8M54hdwc9sm+gKQX9kCsMuk/OQkpm3dgrkzQyg5jVOqbMhXg86xfChStTOqsXJyd LR0461rcT8h10fs48ibjrK8WHHihgTtbI/OdXtZe1BYrLSb7Rxon5P7qlPEcPNqpu99/ OsvfqiZ89B0D0Fef9tub89FTGWkge2AhDekSLC0vThrL7nOCjVuAOk/sFCrlrnBfOp8m mkunSSyAeuyN6DVoeLTYzw/JbZDHxziq8XYDgmpfKTdKt/7GUlw4GGMmVNX7DSjS0BS0 5+wQ== X-Gm-Message-State: APjAAAWW1lMdMM9fRhg6O5xYSaYdyPIRuewBgebjOaQxzdMBWFfDzpaN qZjVDKzUJ9QFwO8sW+PSeL5vPRgxaYU48Q== X-Google-Smtp-Source: APXvYqxmovVlkl+4fP9FLdXL3icgITuZCEakWUBdgknLwJ4k5D054OfCd8emEFuhinR4NOSIXISVSQ== X-Received: by 2002:a7b:c053:: with SMTP id u19mr1409374wmc.63.1554323259344; Wed, 03 Apr 2019 13:27:39 -0700 (PDT) Received: from localhost.localdomain (84-238-136-197.ip.btc-net.bg. [84.238.136.197]) by smtp.gmail.com with ESMTPSA id d14sm26827982wro.79.2019.04.03.13.27.38 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 03 Apr 2019 13:27:38 -0700 (PDT) From: Nikolay Aleksandrov To: netdev@vger.kernel.org Cc: liam.mcbirnie@boeing.com, roopa@cumulusnetworks.com, stephen@networkplumber.org, bridge@lists.linux-foundation.org, Nikolay Aleksandrov Subject: [PATCH net] net: bridge: always clear mcast matching struct on reports and leaves Date: Wed, 3 Apr 2019 23:27:24 +0300 Message-Id: <20190403202724.9123-1-nikolay@cumulusnetworks.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: References: MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org We need to be careful and always zero the whole br_ip struct when it is used for matching since the rhashtable change. This patch fixes all the places which didn't properly clear it which in turn might've caused mismatches. Thanks for the great bug report with reproducing steps and bisection. Steps to reproduce (from the bug report): ip link add br0 type bridge mcast_querier 1 ip link set br0 up ip link add v2 type veth peer name v3 ip link set v2 master br0 ip link set v2 up ip link set v3 up ip addr add 3.0.0.2/24 dev v3 ip netns add test ip link add v1 type veth peer name v1 netns test ip link set v1 master br0 ip link set v1 up ip -n test link set v1 up ip -n test addr add 3.0.0.1/24 dev v1 # Multicast receiver ip netns exec test socat UDP4-RECVFROM:5588,ip-add-membership=224.224.224.224:3.0.0.1,fork - # Multicast sender echo hello | nc -u -s 3.0.0.2 224.224.224.224 5588 Reported-by: liam.mcbirnie@boeing.com Fixes: 19e3a9c90c53 ("net: bridge: convert multicast to generic rhashtable") Signed-off-by: Nikolay Aleksandrov --- I will cook a selftest for this as well. net/bridge/br_multicast.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c index a0e369179f6d..02da21d771c9 100644 --- a/net/bridge/br_multicast.c +++ b/net/bridge/br_multicast.c @@ -601,6 +601,7 @@ static int br_ip4_multicast_add_group(struct net_bridge *br, if (ipv4_is_local_multicast(group)) return 0; + memset(&br_group, 0, sizeof(br_group)); br_group.u.ip4 = group; br_group.proto = htons(ETH_P_IP); br_group.vid = vid; @@ -1497,6 +1498,7 @@ static void br_ip4_multicast_leave_group(struct net_bridge *br, own_query = port ? &port->ip4_own_query : &br->ip4_own_query; + memset(&br_group, 0, sizeof(br_group)); br_group.u.ip4 = group; br_group.proto = htons(ETH_P_IP); br_group.vid = vid; @@ -1520,6 +1522,7 @@ static void br_ip6_multicast_leave_group(struct net_bridge *br, own_query = port ? &port->ip6_own_query : &br->ip6_own_query; + memset(&br_group, 0, sizeof(br_group)); br_group.u.ip6 = *group; br_group.proto = htons(ETH_P_IPV6); br_group.vid = vid;