diff options
| author | WANG Cong <xiyou.wangcong@gmail.com> | 2017-05-03 22:07:31 -0700 |
|---|---|---|
| committer | Ben Hutchings <ben@decadent.org.uk> | 2017-09-15 18:30:14 +0100 |
| commit | 9cd815ca941e2c83f271dadb29b31a5265878427 (patch) | |
| tree | c2b6603a822512201eda43971d41d48c04ada886 /include | |
| parent | 1042c14734bce5308ca0f236331e4ed3344a2f11 (diff) | |
ipv6: initialize route null entry in addrconf_init()
commit 2f460933f58eee3393aba64f0f6d14acb08d1724 upstream.
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: Ben Hutchings <ben@decadent.org.uk>
Diffstat (limited to 'include')
| -rw-r--r-- | include/net/ip6_route.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/include/net/ip6_route.h b/include/net/ip6_route.h index eda131d179d9..2e765849ccd6 100644 --- a/include/net/ip6_route.h +++ b/include/net/ip6_route.h @@ -69,6 +69,7 @@ struct dst_entry *ip6_route_output(struct net *net, const struct sock *sk, struct dst_entry *ip6_route_lookup(struct net *net, struct flowi6 *fl6, int flags); +void ip6_route_init_special_entries(void); int ip6_route_init(void); void ip6_route_cleanup(void); |
