Commit b4b583d4 authored by Jiri Kosina's avatar Jiri Kosina

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: default avatarDenilson Figueiredo de Sá <denilsonsa@gmail.com>
Tested-by: default avatarDenilson Figueiredo de Sá <denilsonsa@gmail.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent 6da70669
...@@ -822,9 +822,8 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct ...@@ -822,9 +822,8 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct
return; return;
} }
/* Ignore absolute values that are out of bounds */ /* Ignore out-of-range values as per HID specification, section 5.10 */
if ((usage->type == EV_ABS && (value < field->logical_minimum || if (value < field->logical_minimum || value > field->logical_maximum) {
value > field->logical_maximum))) {
dbg_hid("Ignoring out-of-range value %x\n", value); dbg_hid("Ignoring out-of-range value %x\n", value);
return; return;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment