diff options
author | Jiri Kosina <jkosina@suse.cz> | 2009-05-01 18:02:57 -0400 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2009-05-01 18:02:57 -0400 |
commit | e5288eb5ea89bd82d897cb687348bc608278f920 (patch) | |
tree | bf123fe05a3310667c8f8024f7b459a40cef010e /drivers/hid | |
parent | 89092ddd7aca598e3b8874f7a49216e7917d8f3f (diff) |
HID: fix oops in hid_check_keys_pressed()
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>
Diffstat (limited to 'drivers/hid')
-rw-r--r-- | drivers/hid/hid-core.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index c7075d2b0786..8551693d645f 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c | |||
@@ -1825,6 +1825,9 @@ int hid_check_keys_pressed(struct hid_device *hid) | |||
1825 | struct hid_input *hidinput; | 1825 | struct hid_input *hidinput; |
1826 | int i; | 1826 | int i; |
1827 | 1827 | ||
1828 | if (!(hid->claimed & HID_CLAIMED_INPUT)) | ||
1829 | return 0; | ||
1830 | |||
1828 | list_for_each_entry(hidinput, &hid->inputs, list) { | 1831 | list_for_each_entry(hidinput, &hid->inputs, list) { |
1829 | for (i = 0; i < BITS_TO_LONGS(KEY_MAX); i++) | 1832 | for (i = 0; i < BITS_TO_LONGS(KEY_MAX); i++) |
1830 | if (hidinput->input->key[i]) | 1833 | if (hidinput->input->key[i]) |