diff options
Diffstat (limited to 'net/ipv6/addrconf.c')
| -rw-r--r-- | net/ipv6/addrconf.c | 26 | 
1 files changed, 10 insertions, 16 deletions
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 78d8414d2cf..d6279cb3d54 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -4876,26 +4876,20 @@ static void addrconf_sysctl_unregister(struct inet6_dev *idev)  static int __net_init addrconf_init_net(struct net *net)  { -	int err; +	int err = -ENOMEM;  	struct ipv6_devconf *all, *dflt; -	err = -ENOMEM; -	all = &ipv6_devconf; -	dflt = &ipv6_devconf_dflt; +	all = kmemdup(&ipv6_devconf, sizeof(ipv6_devconf), GFP_KERNEL); +	if (all == NULL) +		goto err_alloc_all; -	if (!net_eq(net, &init_net)) { -		all = kmemdup(all, sizeof(ipv6_devconf), GFP_KERNEL); -		if (all == NULL) -			goto err_alloc_all; +	dflt = kmemdup(&ipv6_devconf_dflt, sizeof(ipv6_devconf_dflt), GFP_KERNEL); +	if (dflt == NULL) +		goto err_alloc_dflt; -		dflt = kmemdup(dflt, sizeof(ipv6_devconf_dflt), GFP_KERNEL); -		if (dflt == NULL) -			goto err_alloc_dflt; -	} else { -		/* these will be inherited by all namespaces */ -		dflt->autoconf = ipv6_defaults.autoconf; -		dflt->disable_ipv6 = ipv6_defaults.disable_ipv6; -	} +	/* these will be inherited by all namespaces */ +	dflt->autoconf = ipv6_defaults.autoconf; +	dflt->disable_ipv6 = ipv6_defaults.disable_ipv6;  	net->ipv6.devconf_all = all;  	net->ipv6.devconf_dflt = dflt;  |