HID: fix oops in hid_check_keys_pressed()
authorJiri Kosina <jkosina@suse.cz>
Fri, 1 May 2009 22:02:57 +0000 (00:02 +0200)
committerJiri Kosina <jkosina@suse.cz>
Fri, 1 May 2009 22:02:57 +0000 (00:02 +0200)
If the device is not claimed by hid-input (i.e devices driver by userspace
hiddev/hidraw-based drivers, or completely detached from HID
and driver by libusb), we must not check the hid->inptus, as it
is not guaranteed to be initialized, as this is performed only for devices
handled by hid-input.

Reported-by: Guillaume Chazarain <guichaz@gmail.com>
Tested-by: Guillaume Chazarain <guichaz@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-core.c

index c7075d2b0786efc8d55da550a27dd2fd16f3b893..8551693d645fc602fe5f3bf3ccd1352fefc439c2 100644 (file)
@@ -1825,6 +1825,9 @@ int hid_check_keys_pressed(struct hid_device *hid)
        struct hid_input *hidinput;
        int i;
 
+       if (!(hid->claimed & HID_CLAIMED_INPUT))
+               return 0;
+
        list_for_each_entry(hidinput, &hid->inputs, list) {
                for (i = 0; i < BITS_TO_LONGS(KEY_MAX); i++)
                        if (hidinput->input->key[i])