Re: net/ipv6: GPF in rt6_device_match

From: David Ahern
Date: Wed May 03 2017 - 18:09:43 EST


On 5/3/17 4:02 PM, Cong Wang wrote:
> On Wed, May 3, 2017 at 11:22 AM, David Ahern <dsahern@xxxxxxxxx> 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 ;-)