Skip to content

Commit

Permalink
HID: lenovo-tpkbd: fix leak if tpkbd_probe_tp fails
Browse files Browse the repository at this point in the history
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: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
  • Loading branch information
Benjamin Tissoires authored and Jiri Kosina committed Sep 13, 2013
1 parent 8821f5d commit 0ccdd9e
Showing 1 changed file with 10 additions and 5 deletions.
15 changes: 10 additions & 5 deletions drivers/hid/hid-lenovo-tpkbd.c
Original file line number Diff line number Diff line change
Expand Up @@ -414,22 +414,27 @@ static int tpkbd_probe(struct hid_device *hdev,
ret = hid_parse(hdev);
if (ret) {
hid_err(hdev, "hid_parse failed\n");
goto err_free;
goto err;
}

ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
if (ret) {
hid_err(hdev, "hid_hw_start failed\n");
goto err_free;
goto err;
}

uhdev = (struct usbhid_device *) hdev->driver_data;

if (uhdev->ifnum == 1)
return tpkbd_probe_tp(hdev);
if (uhdev->ifnum == 1) {
ret = tpkbd_probe_tp(hdev);
if (ret)
goto err_hid;
}

return 0;
err_free:
err_hid:
hid_hw_stop(hdev);
err:
return ret;
}

Expand Down

0 comments on commit 0ccdd9e

Please sign in to comment.