|
@@ -4127,7 +4127,8 @@ static void addrconf_sysctl_register(struct inet6_dev *idev, struct ipv6_devconf
|
|
|
|
|
|
t = kmemdup(&addrconf_sysctl, sizeof(*t), GFP_KERNEL);
|
|
t = kmemdup(&addrconf_sysctl, sizeof(*t), GFP_KERNEL);
|
|
if (t == NULL)
|
|
if (t == NULL)
|
|
- return;
|
|
|
|
|
|
+ goto out;
|
|
|
|
+
|
|
for (i=0; t->addrconf_vars[i].data; i++) {
|
|
for (i=0; t->addrconf_vars[i].data; i++) {
|
|
t->addrconf_vars[i].data += (char*)p - (char*)&ipv6_devconf;
|
|
t->addrconf_vars[i].data += (char*)p - (char*)&ipv6_devconf;
|
|
t->addrconf_vars[i].extra1 = idev; /* embedded; no ref */
|
|
t->addrconf_vars[i].extra1 = idev; /* embedded; no ref */
|
|
@@ -4147,7 +4148,7 @@ static void addrconf_sysctl_register(struct inet6_dev *idev, struct ipv6_devconf
|
|
*/
|
|
*/
|
|
dev_name = kstrdup(dev_name, GFP_KERNEL);
|
|
dev_name = kstrdup(dev_name, GFP_KERNEL);
|
|
if (!dev_name)
|
|
if (!dev_name)
|
|
- goto free;
|
|
|
|
|
|
+ goto free;
|
|
|
|
|
|
t->addrconf_dev[0].procname = dev_name;
|
|
t->addrconf_dev[0].procname = dev_name;
|
|
|
|
|
|
@@ -4159,16 +4160,15 @@ static void addrconf_sysctl_register(struct inet6_dev *idev, struct ipv6_devconf
|
|
t->sysctl_header = register_sysctl_table(t->addrconf_root_dir);
|
|
t->sysctl_header = register_sysctl_table(t->addrconf_root_dir);
|
|
if (t->sysctl_header == NULL)
|
|
if (t->sysctl_header == NULL)
|
|
goto free_procname;
|
|
goto free_procname;
|
|
- else
|
|
|
|
- p->sysctl = t;
|
|
|
|
|
|
+
|
|
|
|
+ p->sysctl = t;
|
|
return;
|
|
return;
|
|
|
|
|
|
- /* error path */
|
|
|
|
- free_procname:
|
|
|
|
|
|
+free_procname:
|
|
kfree(dev_name);
|
|
kfree(dev_name);
|
|
- free:
|
|
|
|
|
|
+free:
|
|
kfree(t);
|
|
kfree(t);
|
|
-
|
|
|
|
|
|
+out:
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|