ipv6: initialize route null entry in addrconf_init()
authorWANG Cong <xiyou.wangcong@gmail.com>
Thu, 4 May 2017 05:07:31 +0000 (22:07 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 14 May 2017 12:08:29 +0000 (14:08 +0200)
commit062e49d89f6859d7a1e41ea39d5012caa9e4d4b2
treedf0a63e5cdab4483570419f9707cdf145747a7b6
parentd3081680506fe919f1ed51944cafa8c5cb9007ed
ipv6: initialize route null entry in addrconf_init()

[ Upstream commit 2f460933f58eee3393aba64f0f6d14acb08d1724 ]

Andrey reported a crash on init_net.ipv6.ip6_null_entry->rt6i_idev
since it is always NULL.

This is clearly wrong, we have code to initialize it to loopback_dev,
unfortunately the order is still not correct.

loopback_dev is registered very early during boot, we lose a chance
to re-initialize it in notifier. addrconf_init() is called after
ip6_route_init(), which means we have no chance to correct it.

Fix it by moving this initialization explicitly after
ipv6_add_dev(init_net.loopback_dev) in addrconf_init().

Reported-by: Andrey Konovalov <andreyknvl@google.com>
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Tested-by: Andrey Konovalov <andreyknvl@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
include/net/ip6_route.h
net/ipv6/addrconf.c
net/ipv6/route.c