aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexey Khoroshilov <khoroshilov@ispras.ru>2015-05-28 20:39:31 -0400
committerJiri Kosina <jkosina@suse.cz>2015-05-29 10:30:13 -0400
commitb721260085533a9bead1fd853c0aead7d82ce763 (patch)
treeb38148a446b694dfa7fa2af617df8b42d01ff911
parent323ddaa84f003a0c1d49f3ce5d106bc3cef070d5 (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.c9
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;
639err:
640 sysfs_remove_group(&hdev->dev.kobj, &lenovo_attr_group_tpkbd);
641 return ret;
637} 642}
638 643
639static int lenovo_probe_cptkbd(struct hid_device *hdev) 644static int lenovo_probe_cptkbd(struct hid_device *hdev)