diff options
author | Jiri Kosina <jkosina@suse.cz> | 2011-10-31 11:26:22 -0400 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2011-11-16 09:00:31 -0500 |
commit | b4b583d4e9a5ff28c4a150bb25a4fff5cd4dfbbd (patch) | |
tree | 8b5ad4d5b9ce4d2b6dd556f15f813dae6c1121bb /drivers/hid | |
parent | 6da7066906e977d42104a859c490f5f9a300488c (diff) |
HID: be more strict when ignoring out-of-range fields
HID 1.11 specification, section 5.10 tells us:
HID class devices support the ability to ignore selected fields in a
report at run- time. This is accomplished by declaring bit field in a
report that is capable of containing a range of values larger than
those actually generated by the control. If the host or the device
receives an out-of-range value then the current value for the
respective control will not be modified.
So we shouldn't be restricted to EV_ABS only.
Reported-by: Denilson Figueiredo de Sá <denilsonsa@gmail.com>
Tested-by: Denilson Figueiredo de Sá <denilsonsa@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'drivers/hid')
-rw-r--r-- | drivers/hid/hid-input.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c index b7b0d55c0ede..6e3252651ce3 100644 --- a/drivers/hid/hid-input.c +++ b/drivers/hid/hid-input.c | |||
@@ -822,9 +822,8 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct | |||
822 | return; | 822 | return; |
823 | } | 823 | } |
824 | 824 | ||
825 | /* Ignore absolute values that are out of bounds */ | 825 | /* Ignore out-of-range values as per HID specification, section 5.10 */ |
826 | if ((usage->type == EV_ABS && (value < field->logical_minimum || | 826 | if (value < field->logical_minimum || value > field->logical_maximum) { |
827 | value > field->logical_maximum))) { | ||
828 | dbg_hid("Ignoring out-of-range value %x\n", value); | 827 | dbg_hid("Ignoring out-of-range value %x\n", value); |
829 | return; | 828 | return; |
830 | } | 829 | } |