Skip to content

Commit

Permalink
HID: handle logical min/max signedness properly in parser
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
srinivas pandruvada authored and Jiri Kosina committed May 14, 2012
1 parent d6d7c87 commit 0cd516c
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions drivers/hid/hid-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down

0 comments on commit 0cd516c

Please sign in to comment.