HID: wacom: use devm_kasprintf for allocating the name of the remote

The sysfs group was indeed removed by kobject_put(wacom->remote_dir) in
wacom_remove(), but the name of the group was never freed.

Also remove the misplaced kobject_put(wacom->remote_dir) in the error
path of wacom_remote_create_attr_group().

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Acked-by: Ping Cheng <pingc@wacom.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
Benjamin Tissoires 2016-07-13 18:05:57 +02:00 committed by Jiri Kosina
parent 2df68a8864
commit c1f5409b74

View File

@ -25,7 +25,6 @@
#define WAC_CMD_RETRIES 10 #define WAC_CMD_RETRIES 10
#define WAC_CMD_DELETE_PAIRING 0x20 #define WAC_CMD_DELETE_PAIRING 0x20
#define WAC_CMD_UNPAIR_ALL 0xFF #define WAC_CMD_UNPAIR_ALL 0xFF
#define WAC_REMOTE_SERIAL_MAX_STRLEN 9
#define DEV_ATTR_RW_PERM (S_IRUGO | S_IWUSR | S_IWGRP) #define DEV_ATTR_RW_PERM (S_IRUGO | S_IWUSR | S_IWGRP)
#define DEV_ATTR_WO_PERM (S_IWUSR | S_IWGRP) #define DEV_ATTR_WO_PERM (S_IWUSR | S_IWGRP)
@ -1233,23 +1232,21 @@ DEVICE_EKR_ATTR_GROUP(4);
int wacom_remote_create_attr_group(struct wacom *wacom, __u32 serial, int index) int wacom_remote_create_attr_group(struct wacom *wacom, __u32 serial, int index)
{ {
int error = 0; int error = 0;
char *buf;
struct wacom_wac *wacom_wac = &wacom->wacom_wac; struct wacom_wac *wacom_wac = &wacom->wacom_wac;
wacom_wac->serial[index] = serial; wacom_wac->serial[index] = serial;
buf = kzalloc(WAC_REMOTE_SERIAL_MAX_STRLEN, GFP_KERNEL); wacom->remote_group[index].name = devm_kasprintf(&wacom->hdev->dev,
if (!buf) GFP_KERNEL,
"%d", serial);
if (!wacom->remote_group[index].name)
return -ENOMEM; return -ENOMEM;
snprintf(buf, WAC_REMOTE_SERIAL_MAX_STRLEN, "%d", serial);
wacom->remote_group[index].name = buf;
error = sysfs_create_group(wacom->remote_dir, error = sysfs_create_group(wacom->remote_dir,
&wacom->remote_group[index]); &wacom->remote_group[index]);
if (error) { if (error) {
hid_err(wacom->hdev, hid_err(wacom->hdev,
"cannot create sysfs group err: %d\n", error); "cannot create sysfs group err: %d\n", error);
kobject_put(wacom->remote_dir);
return error; return error;
} }
@ -1271,7 +1268,8 @@ void wacom_remote_destroy_attr_group(struct wacom *wacom, __u32 serial)
if (wacom->remote_group[i].name) { if (wacom->remote_group[i].name) {
sysfs_remove_group(wacom->remote_dir, sysfs_remove_group(wacom->remote_dir,
&wacom->remote_group[i]); &wacom->remote_group[i]);
kfree(wacom->remote_group[i].name); devm_kfree(&wacom->hdev->dev,
(char *)wacom->remote_group[i].name);
wacom->remote_group[i].name = NULL; wacom->remote_group[i].name = NULL;
} }
} }