From: Jiri Kosina Date: Mon, 31 Oct 2011 15:26:22 +0000 (+0100) Subject: HID: be more strict when ignoring out-of-range fields X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=b4b583d4e9a5ff28c4a150bb25a4fff5cd4dfbbd;p=GitHub%2Fexynos8895%2Fandroid_kernel_samsung_universal8895.git 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á Tested-by: Denilson Figueiredo de Sá Signed-off-by: Jiri Kosina --- 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 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; }