OSDN Git Service

HID: handle logical min/max signedness properly in parser
authorsrinivas pandruvada <srinivas.pandruvada@intel.com>
Thu, 10 May 2012 23:45:31 +0000 (16:45 -0700)
committerJiri Kosina <jkosina@suse.cz>
Mon, 14 May 2012 12:57:26 +0000 (14:57 +0200)
When logical maximum is 0xffffffff, the parser fails even if
logical minimum is more than 0.

By HID specification this is a valid combination.

Signed-off-by: srinivas pandruvada <srinivas.pandruvada@intel.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
drivers/hid/hid-core.c

index 0cddcaa..0bfbc48 100644 (file)
@@ -230,9 +230,15 @@ static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsign
                return -1;
        }
 
-       if (parser->global.logical_maximum < parser->global.logical_minimum) {
-               hid_err(parser->device, "logical range invalid %d %d\n",
-                               parser->global.logical_minimum, parser->global.logical_maximum);
+       if ((parser->global.logical_minimum < 0 &&
+               parser->global.logical_maximum <
+               parser->global.logical_minimum) ||
+               (parser->global.logical_minimum >= 0 &&
+               (__u32)parser->global.logical_maximum <
+               (__u32)parser->global.logical_minimum)) {
+               dbg_hid("logical range invalid 0x%x 0x%x\n",
+                       parser->global.logical_minimum,
+                       parser->global.logical_maximum);
                return -1;
        }