diff --git i/drivers/parport/procfs.c w/drivers/parport/procfs.c index 7aa99c65b934..0e3b01368aec 100644 --- i/drivers/parport/procfs.c +++ w/drivers/parport/procfs.c @@ -423,12 +423,24 @@ parport_default_sysctl_table = { int parport_proc_register(struct parport *port) { struct parport_sysctl_table *t; - char *tmp_dir_path; + char *parport_name_devices, *parport_name; int i, err = 0; + parport_name_devices = kasprintf(GFP_KERNEL, "dev/parport/%s/devices", port->name); + if (!parport_name_devices) + return -ENOMEM; + + parport_name = kasprintf(GFP_KERNEL, "dev/parport/%s", port->name); + if (!parport_name) { + err = -ENOMEM; + goto exit_partport_name_devices; + } + t = kmemdup(&parport_sysctl_template, sizeof(*t), GFP_KERNEL); - if (t == NULL) - return -ENOMEM; + if (t == NULL) { + err = -ENOMEM; + goto exit_parport_name; + } t->device_dir[0].extra1 = port; @@ -438,27 +450,13 @@ int parport_proc_register(struct parport *port) t->vars[5 + i].extra2 = &port->probe_info[i]; } - tmp_dir_path = kasprintf(GFP_KERNEL, "dev/parport/%s/devices", port->name); - if (!tmp_dir_path) { - err = -ENOMEM; - goto exit_free_t; - } - - t->devices_header = register_sysctl(tmp_dir_path, t->device_dir); + t->devices_header = register_sysctl(parport_name_devices, t->device_dir); if (t->devices_header == NULL) { err = -ENOENT; - goto exit_free_tmp_dir_path; + goto exit_free_t; } - kfree(tmp_dir_path); - - tmp_dir_path = kasprintf(GFP_KERNEL, "dev/parport/%s", port->name); - if (!tmp_dir_path) { - err = -ENOMEM; - goto unregister_devices_h; - } - - t->port_header = register_sysctl(tmp_dir_path, t->vars); + t->port_header = register_sysctl(parport_name, t->vars); if (t->port_header == NULL) { err = -ENOENT; goto unregister_devices_h; @@ -466,17 +464,19 @@ int parport_proc_register(struct parport *port) port->sysctl_table = t; - kfree(tmp_dir_path); - return 0; + goto exit_parport_name; unregister_devices_h: unregister_sysctl_table(t->devices_header); -exit_free_tmp_dir_path: - kfree(tmp_dir_path); - exit_free_t: kfree(t); + +exit_parport_name: + kfree(parport_name); + +exit_partport_name_devices: + kfree(parport_name_devices); return err; }