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

Commit ef14a4bf authored by Andrew Duggan's avatar Andrew Duggan Committed by Jiri Kosina
Browse files

HID: rmi: Check that a device is a RMI device before calling RMI functions



The hid-rmi driver may handle non rmi devices on composite USB devices.
Callbacks need to make sure that the current device is a RMI device before
calling RMI specific functions. Most callbacks already have this check, but
this patch adds checks to the remaining callbacks.

Reported-by: default avatarHendrik Langer <hendrik.langer@gmx.de>
Tested-by: default avatarHendrik Langer <hendrik.langer@gmx.de>
Reviewed-by: default avatarBenjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: default avatarAndrew Duggan <aduggan@synaptics.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent 1fc26792
Loading
Loading
Loading
Loading
+10 −3
Original line number Original line Diff line number Diff line
@@ -368,6 +368,11 @@ static int rmi_check_sanity(struct hid_device *hdev, u8 *data, int size)
static int rmi_raw_event(struct hid_device *hdev,
static int rmi_raw_event(struct hid_device *hdev,
		struct hid_report *report, u8 *data, int size)
		struct hid_report *report, u8 *data, int size)
{
{
	struct rmi_data *hdata = hid_get_drvdata(hdev);

	if (!(hdata->device_flags & RMI_DEVICE))
		return 0;

	size = rmi_check_sanity(hdev, data, size);
	size = rmi_check_sanity(hdev, data, size);
	if (size < 2)
	if (size < 2)
		return 0;
		return 0;
@@ -713,9 +718,11 @@ static void rmi_remove(struct hid_device *hdev)
{
{
	struct rmi_data *hdata = hid_get_drvdata(hdev);
	struct rmi_data *hdata = hid_get_drvdata(hdev);


	if (hdata->device_flags & RMI_DEVICE) {
		clear_bit(RMI_STARTED, &hdata->flags);
		clear_bit(RMI_STARTED, &hdata->flags);
		cancel_work_sync(&hdata->reset_work);
		cancel_work_sync(&hdata->reset_work);
		rmi_unregister_transport_device(&hdata->xport);
		rmi_unregister_transport_device(&hdata->xport);
	}


	hid_hw_stop(hdev);
	hid_hw_stop(hdev);
}
}