diff options
author | Vinayak Pane <vpane@nvidia.com> | 2014-05-02 16:21:10 -0700 |
---|---|---|
committer | Peter Kim <pekim@nvidia.com> | 2014-06-12 21:56:17 -0700 |
commit | fd35fa2f2145ddc0a0cde5bc09c7483841f68613 (patch) | |
tree | 10d5416643ce866182d60539bf7ef2d8f654f7b0 /drivers | |
parent | 96c0b4253bf6dd331983250c5d92e96a74f794ba (diff) |
HID: usbhid: add safety check at _report
Add device disconnect check in usbhid_get_raw_report()
Bug 200000762
Bug 1466757
Change-Id: Ia56a5ba746ee197a0be967f4cb09e38e44be8a8f
Signed-off-by: Vinayak Pane <vpane@nvidia.com>
Reviewed-on: http://git-master/r/409171
(cherry picked from commit 0c3a4ca1741ee9c1175af23e27ca0463c05c9872)
Reviewed-on: http://git-master/r/411355
Signed-off-by: Kenneth Kwak <kkwak@nvidia.com>
Reviewed-on: http://git-master/r/417525
Reviewed-by: Peter Kim <pekim@nvidia.com>
Tested-by: Peter Kim <pekim@nvidia.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/hid/usbhid/hid-core.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c index 4bbb883a3dd2..f03401947718 100644 --- a/drivers/hid/usbhid/hid-core.c +++ b/drivers/hid/usbhid/hid-core.c @@ -901,12 +901,21 @@ static int usbhid_get_raw_report(struct hid_device *hid, unsigned char report_type) { struct usbhid_device *usbhid = hid->driver_data; - struct usb_device *dev = hid_to_usb_dev(hid); - struct usb_interface *intf = usbhid->intf; - struct usb_host_interface *interface = intf->cur_altsetting; + struct usb_device *dev; + struct usb_interface *intf; + struct usb_host_interface *interface; int skipped_report_id = 0; int ret; + if (test_bit(HID_DISCONNECTED, &usbhid->iofl)) { + pr_err("hid device disconnected\n"); + return -ESHUTDOWN; + } + + dev = hid_to_usb_dev(hid); + intf = usbhid->intf; + interface = intf->cur_altsetting; + /* Byte 0 is the report number. Report data starts at byte 1.*/ buf[0] = report_number; if (report_number == 0x0) { |