Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754441AbbGFLQu (ORCPT ); Mon, 6 Jul 2015 07:16:50 -0400 Received: from mail-wg0-f44.google.com ([74.125.82.44]:36560 "EHLO mail-wg0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751653AbbGFLQs (ORCPT ); Mon, 6 Jul 2015 07:16:48 -0400 Message-ID: <1436181400.25714.10.camel@edumazet-glaptop2.roam.corp.google.com> Subject: Re: [PATCH] net/bridge: Add missing in6_dev_put in br_validate_ipv6 From: Eric Dumazet To: Julien Grall Cc: Florian Westphal , stephen@networkplumber.org, davem@davemloft.net, bridge@lists.linux-foundation.org, netdev@vger.kernel.org, xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org, Bernhard Thaler , Pablo Neira Ayuso , ian.campbell@citrix.com, wei.liu2@citrix.com Date: Mon, 06 Jul 2015 13:16:40 +0200 In-Reply-To: <559A5A0B.4040700@citrix.com> References: <1435946491-11148-1-git-send-email-julien.grall@citrix.com> <20150703204213.GM16529@breakpoint.cc> <559A5A0B.4040700@citrix.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.10.4-0ubuntu2 Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1426 Lines: 47 On Mon, 2015-07-06 at 11:35 +0100, Julien Grall wrote: > __in6_dev_get requires to hold rcu_read_lock or RTNL. My knowledge on > this code is very limited. Are we sure that one this lock is hold? At > first glance, I wasn't able to find one. You could play it safe ;) diff --git a/net/bridge/br_netfilter_ipv6.c b/net/bridge/br_netfilter_ipv6.c index 6d12d2675c80..90e8ccc21cc5 100644 --- a/net/bridge/br_netfilter_ipv6.c +++ b/net/bridge/br_netfilter_ipv6.c @@ -104,10 +104,12 @@ int br_validate_ipv6(struct sk_buff *skb) { const struct ipv6hdr *hdr; struct net_device *dev = skb->dev; - struct inet6_dev *idev = in6_dev_get(skb->dev); + struct inet6_dev *idev; u32 pkt_len; u8 ip6h_len = sizeof(struct ipv6hdr); + rcu_read_lock(); + idev = __in6_dev_get(dev); if (!pskb_may_pull(skb, ip6h_len)) goto inhdr_error; @@ -140,11 +142,13 @@ int br_validate_ipv6(struct sk_buff *skb) /* No IP options in IPv6 header; however it should be * checked if some next headers need special treatment */ + rcu_read_unlock(); return 0; inhdr_error: IP6_INC_STATS_BH(dev_net(dev), idev, IPSTATS_MIB_INHDRERRORS); drop: + rcu_read_unlock(); return -1; } -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/