From mboxrd@z Thu Jan 1 00:00:00 1970 From: David Ahern Subject: Re: net/ipv6: GPF in rt6_device_match Date: Wed, 3 May 2017 16:09:14 -0600 Message-ID: References: <4ef76406-8e05-ccdf-fefb-dc47d56c71c9@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Cc: Andrey Konovalov , "David S. Miller" , Alexey Kuznetsov , James Morris , Hideaki YOSHIFUJI , Patrick McHardy , netdev , LKML , Dmitry Vyukov , Kostya Serebryany , Eric Dumazet , syzkaller To: Cong Wang Return-path: In-Reply-To: Sender: linux-kernel-owner@vger.kernel.org List-Id: netdev.vger.kernel.org On 5/3/17 4:02 PM, Cong Wang wrote: > On Wed, May 3, 2017 at 11:22 AM, David Ahern wrote: >> On 5/3/17 11:02 AM, Cong Wang wrote: >>> A quick glance shows we need to simply check local->rt6i_idev >>> since we do the same check for sprt right above. >> >> As I recall, rt6i_idev is set for all routes except null_entry and it is >> not set on null_entry only because of initialization order. > > Are you sure? > > if (event == NETDEV_REGISTER && (dev->flags & IFF_LOOPBACK)) { > net->ipv6.ip6_null_entry->dst.dev = dev; > net->ipv6.ip6_null_entry->rt6i_idev = in6_dev_get(dev); > #ifdef CONFIG_IPV6_MULTIPLE_TABLES > net->ipv6.ip6_prohibit_entry->dst.dev = dev; > net->ipv6.ip6_prohibit_entry->rt6i_idev = in6_dev_get(dev); > net->ipv6.ip6_blk_hole_entry->dst.dev = dev; > net->ipv6.ip6_blk_hole_entry->rt6i_idev = in6_dev_get(dev); > #endif > } > > Loopback is the first one to register, so null entry is set to > loopback dev initially. Similar for init_net. > Why don't you add a printk and see ;-)