diff options
author | Alexey Khoroshilov <khoroshilov@ispras.ru> | 2015-05-28 20:39:31 -0400 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2015-05-29 10:30:13 -0400 |
commit | b721260085533a9bead1fd853c0aead7d82ce763 (patch) | |
tree | b38148a446b694dfa7fa2af617df8b42d01ff911 | |
parent | 323ddaa84f003a0c1d49f3ce5d106bc3cef070d5 (diff) |
HID: lenovo: Remove sysfs group on failure path
There is no sysfs_group_remove() on failure path in lenovo_probe_tpkbd().
Found by Linux Driver Verification project (linuxtesting.org).
Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
-rw-r--r-- | drivers/hid/hid-lenovo.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/hid/hid-lenovo.c b/drivers/hid/hid-lenovo.c index c4c3f0952521..64ed3e3f227a 100644 --- a/drivers/hid/hid-lenovo.c +++ b/drivers/hid/hid-lenovo.c | |||
@@ -599,7 +599,8 @@ static int lenovo_probe_tpkbd(struct hid_device *hdev) | |||
599 | GFP_KERNEL); | 599 | GFP_KERNEL); |
600 | if (data_pointer == NULL) { | 600 | if (data_pointer == NULL) { |
601 | hid_err(hdev, "Could not allocate memory for driver data\n"); | 601 | hid_err(hdev, "Could not allocate memory for driver data\n"); |
602 | return -ENOMEM; | 602 | ret = -ENOMEM; |
603 | goto err; | ||
603 | } | 604 | } |
604 | 605 | ||
605 | // set same default values as windows driver | 606 | // set same default values as windows driver |
@@ -610,7 +611,8 @@ static int lenovo_probe_tpkbd(struct hid_device *hdev) | |||
610 | name_micmute = devm_kzalloc(&hdev->dev, name_sz, GFP_KERNEL); | 611 | name_micmute = devm_kzalloc(&hdev->dev, name_sz, GFP_KERNEL); |
611 | if (name_mute == NULL || name_micmute == NULL) { | 612 | if (name_mute == NULL || name_micmute == NULL) { |
612 | hid_err(hdev, "Could not allocate memory for led data\n"); | 613 | hid_err(hdev, "Could not allocate memory for led data\n"); |
613 | return -ENOMEM; | 614 | ret = -ENOMEM; |
615 | goto err; | ||
614 | } | 616 | } |
615 | snprintf(name_mute, name_sz, "%s:amber:mute", dev_name(dev)); | 617 | snprintf(name_mute, name_sz, "%s:amber:mute", dev_name(dev)); |
616 | snprintf(name_micmute, name_sz, "%s:amber:micmute", dev_name(dev)); | 618 | snprintf(name_micmute, name_sz, "%s:amber:micmute", dev_name(dev)); |
@@ -634,6 +636,9 @@ static int lenovo_probe_tpkbd(struct hid_device *hdev) | |||
634 | lenovo_features_set_tpkbd(hdev); | 636 | lenovo_features_set_tpkbd(hdev); |
635 | 637 | ||
636 | return 0; | 638 | return 0; |
639 | err: | ||
640 | sysfs_remove_group(&hdev->dev.kobj, &lenovo_attr_group_tpkbd); | ||
641 | return ret; | ||
637 | } | 642 | } |
638 | 643 | ||
639 | static int lenovo_probe_cptkbd(struct hid_device *hdev) | 644 | static int lenovo_probe_cptkbd(struct hid_device *hdev) |