Commit 0ccdd9e7 authored by Benjamin Tissoires's avatar Benjamin Tissoires Committed by Jiri Kosina

HID: lenovo-tpkbd: fix leak if tpkbd_probe_tp fails

If tpkbd_probe_tp() bails out, the probe() function return an error,
but hid_hw_stop() is never called.

fixes:
https://bugzilla.redhat.com/show_bug.cgi?id=1003998

Cc: stable@vger.kernel.org
Signed-off-by: default avatarBenjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent 8821f5dc
...@@ -414,22 +414,27 @@ static int tpkbd_probe(struct hid_device *hdev, ...@@ -414,22 +414,27 @@ static int tpkbd_probe(struct hid_device *hdev,
ret = hid_parse(hdev); ret = hid_parse(hdev);
if (ret) { if (ret) {
hid_err(hdev, "hid_parse failed\n"); hid_err(hdev, "hid_parse failed\n");
goto err_free; goto err;
} }
ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT); ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
if (ret) { if (ret) {
hid_err(hdev, "hid_hw_start failed\n"); hid_err(hdev, "hid_hw_start failed\n");
goto err_free; goto err;
} }
uhdev = (struct usbhid_device *) hdev->driver_data; uhdev = (struct usbhid_device *) hdev->driver_data;
if (uhdev->ifnum == 1) if (uhdev->ifnum == 1) {
return tpkbd_probe_tp(hdev); ret = tpkbd_probe_tp(hdev);
if (ret)
goto err_hid;
}
return 0; return 0;
err_free: err_hid:
hid_hw_stop(hdev);
err:
return ret; return ret;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment