aboutsummaryrefslogtreecommitdiffstats
path: root/include/net
diff options
context:
space:
mode:
authorWANG Cong <xiyou.wangcong@gmail.com>2017-05-04 01:07:31 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2017-05-14 08:00:21 -0400
commitecbd3ed2ddfe5fbae4db6aa3a0903af479e0543d (patch)
tree278f138da83139c1d879da4d8277b63a38310f64 /include/net
parent5d8e07740c69fac6ebd6cc0657a41e561e50d124 (diff)
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>
Diffstat (limited to 'include/net')
-rw-r--r--include/net/ip6_route.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h
index f83e78d071a3..2e347d4545cf 100644
--- a/include/net/ip6_route.h
+++ b/include/net/ip6_route.h
@@ -84,6 +84,7 @@ struct dst_entry *ip6_route_lookup(struct net *net, struct flowi6 *fl6,
84struct rt6_info *ip6_pol_route(struct net *net, struct fib6_table *table, 84struct rt6_info *ip6_pol_route(struct net *net, struct fib6_table *table,
85 int ifindex, struct flowi6 *fl6, int flags); 85 int ifindex, struct flowi6 *fl6, int flags);
86 86
87void ip6_route_init_special_entries(void);
87int ip6_route_init(void); 88int ip6_route_init(void);
88void ip6_route_cleanup(void); 89void ip6_route_cleanup(void);
89 90