summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorPaolo Abeni <pabeni@redhat.com>2017-04-24 14:18:28 +0200
committerBen Hutchings <ben@decadent.org.uk>2017-07-18 18:40:39 +0100
commiteacf80709104eeff28d0e556ddc4d49ac58015a6 (patch)
tree71fd5fe1468700edeb896b7093b473e25e206b17 /net
parent0b333ba55f7b0ccfb5e9a9b98cca22756e68c41a (diff)
downloadlinux-stable-eacf80709104eeff28d0e556ddc4d49ac58015a6.tar.gz
linux-stable-eacf80709104eeff28d0e556ddc4d49ac58015a6.tar.bz2
linux-stable-eacf80709104eeff28d0e556ddc4d49ac58015a6.zip
ipv6: move stub initialization after ipv6 setup completion
commit b7d6df57516f8e6a1c847b822ec2a62555455f88 upstream. The ipv6 stub pointer is currently initialized before the ipv6 routing subsystem: a 3rd party can access and use such stub before the routing data is ready. Moreover, such pointer is not cleared in case of initialization error, possibly leading to dangling pointers usage. This change addresses the above moving the stub initialization at the end of ipv6 init code. Fixes: 5f81bd2e5d80 ("ipv6: export a stub for IPv6 symbols used by vxlan") Signed-off-by: Paolo Abeni <pabeni@redhat.com> Acked-by: Cong Wang <xiyou.wangcong@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Diffstat (limited to 'net')
-rw-r--r--net/ipv6/af_inet6.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c
index 8aabacdd5dd7..feed46f4d726 100644
--- a/net/ipv6/af_inet6.c
+++ b/net/ipv6/af_inet6.c
@@ -899,8 +899,6 @@ static int __init inet6_init(void)
if (err)
goto igmp_fail;
- ipv6_stub = &ipv6_stub_impl;
-
err = ipv6_netfilter_init();
if (err)
goto netfilter_fail;
@@ -964,6 +962,10 @@ static int __init inet6_init(void)
if (err)
goto sysctl_fail;
#endif
+
+ /* ensure that ipv6 stubs are visible only after ipv6 is ready */
+ wmb();
+ ipv6_stub = &ipv6_stub_impl;
out:
return err;