Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -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;
}