]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
HID: usbhid: add safety check at _report
authorVinayak Pane <vpane@nvidia.com>
Fri, 2 May 2014 23:21:10 +0000 (16:21 -0700)
committerTony Ly <tly@nvidia.com>
Thu, 15 May 2014 23:45:40 +0000 (16:45 -0700)
Add device disconnect check in usbhid_get_raw_report()

Bug 200000762

Change-Id: Ia56a5ba746ee197a0be967f4cb09e38e44be8a8f
Signed-off-by: Vinayak Pane <vpane@nvidia.com>
Reviewed-on: http://git-master/r/404650
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Tao Xie <txie@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Thomas Cherry <tcherry@nvidia.com>
drivers/hid/usbhid/hid-core.c

index 006267f9ec62f8a6549a31afda329182fb0927fa..714e278eca424eab72a0dcd99259712a09e103ba 100644 (file)
@@ -908,12 +908,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) {