diff options
| -rw-r--r-- | net/ipv4/devinet.c | 39 | 
1 files changed, 5 insertions, 34 deletions
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c index 8a01bfb7c87..88c9e3f68c7 100644 --- a/net/ipv4/devinet.c +++ b/net/ipv4/devinet.c @@ -1585,7 +1585,6 @@ static int ipv4_doint_and_flush(ctl_table *ctl, int write,  static struct devinet_sysctl_table {  	struct ctl_table_header *sysctl_header;  	struct ctl_table devinet_vars[__IPV4_DEVCONF_MAX]; -	char *dev_name;  } devinet_sysctl = {  	.devinet_vars = {  		DEVINET_SYSCTL_COMPLEX_ENTRY(FORWARDING, "forwarding", @@ -1627,16 +1626,7 @@ static int __devinet_sysctl_register(struct net *net, char *dev_name,  {  	int i;  	struct devinet_sysctl_table *t; - -#define DEVINET_CTL_PATH_DEV	3 - -	struct ctl_path devinet_ctl_path[] = { -		{ .procname = "net",  }, -		{ .procname = "ipv4", }, -		{ .procname = "conf", }, -		{ /* to be set */ }, -		{ }, -	}; +	char path[sizeof("net/ipv4/conf/") + IFNAMSIZ];  	t = kmemdup(&devinet_sysctl, sizeof(*t), GFP_KERNEL);  	if (!t) @@ -1648,27 +1638,15 @@ static int __devinet_sysctl_register(struct net *net, char *dev_name,  		t->devinet_vars[i].extra2 = net;  	} -	/* -	 * Make a copy of dev_name, because '.procname' is regarded as const -	 * by sysctl and we wouldn't want anyone to change it under our feet -	 * (see SIOCSIFNAME). -	 */ -	t->dev_name = kstrdup(dev_name, GFP_KERNEL); -	if (!t->dev_name) -		goto free; - -	devinet_ctl_path[DEVINET_CTL_PATH_DEV].procname = t->dev_name; +	snprintf(path, sizeof(path), "net/ipv4/conf/%s", dev_name); -	t->sysctl_header = register_net_sysctl_table(net, devinet_ctl_path, -			t->devinet_vars); +	t->sysctl_header = register_net_sysctl(net, path, t->devinet_vars);  	if (!t->sysctl_header) -		goto free_procname; +		goto free;  	p->sysctl = t;  	return 0; -free_procname: -	kfree(t->dev_name);  free:  	kfree(t);  out: @@ -1684,7 +1662,6 @@ static void __devinet_sysctl_unregister(struct ipv4_devconf *cnf)  	cnf->sysctl = NULL;  	unregister_net_sysctl_table(t->sysctl_header); -	kfree(t->dev_name);  	kfree(t);  } @@ -1714,12 +1691,6 @@ static struct ctl_table ctl_forward_entry[] = {  	},  	{ },  }; - -static __net_initdata struct ctl_path net_ipv4_path[] = { -	{ .procname = "net", }, -	{ .procname = "ipv4", }, -	{ }, -};  #endif  static __net_init int devinet_init_net(struct net *net) @@ -1765,7 +1736,7 @@ static __net_init int devinet_init_net(struct net *net)  		goto err_reg_dflt;  	err = -ENOMEM; -	forw_hdr = register_net_sysctl_table(net, net_ipv4_path, tbl); +	forw_hdr = register_net_sysctl(net, "net/ipv4", tbl);  	if (forw_hdr == NULL)  		goto err_reg_ctl;  	net->ipv4.forw_hdr = forw_hdr;  |