aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiri Kosina <jkosina@suse.cz>2011-10-31 16:26:22 +0100
committerJiri Kosina <jkosina@suse.cz>2011-11-16 15:00:31 +0100
commitb4b583d4e9a5ff28c4a150bb25a4fff5cd4dfbbd (patch)
tree8b5ad4d5b9ce4d2b6dd556f15f813dae6c1121bb
parent6da7066906e977d42104a859c490f5f9a300488c (diff)
downloadxen-b4b583d4e9a5ff28c4a150bb25a4fff5cd4dfbbd.tar.gz
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>
-rw-r--r--drivers/hid/hid-input.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
index b7b0d55c0ede4..6e3252651ce31 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
return;
}
- /* Ignore absolute values that are out of bounds */
- if ((usage->type == EV_ABS && (value < field->logical_minimum ||
- value > field->logical_maximum))) {
+ /* Ignore out-of-range values as per HID specification, section 5.10 */
+ if (value < field->logical_minimum || value > field->logical_maximum) {
dbg_hid("Ignoring out-of-range value %x\n", value);
return;
}