On Tue, 1 May 2012, srinivas pandruvada wrote: > When logical maximum is 0xffffffff, the parser fails even if > logical minimum is equal to or greater than 0. > By HID specification, if both the Logical Minimum and Logical > Maximum extents are defined as positive values (0 or greater) > then the report field can be assumed to be an unsigned value. > Otherwise, all integer values are signed values represented > in 2’s complement format. Signed-off-by: line is missing, could you please fix that? > --- > drivers/hid/hid-core.c | 12 ++++++++++-- > 1 files changed, 10 insertions(+), 2 deletions(-) > > diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c > index c757f10..b616f4b 100644 > --- a/drivers/hid/hid-core.c > +++ b/drivers/hid/hid-core.c > @@ -225,8 +225,16 @@ static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsign > return -1; > } > > - if (parser->global.logical_maximum < parser->global.logical_minimum) { > - dbg_hid("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; > } The change looks correct per se, but I will have to think a little bit more whether other places of report parsing don't need similar adjustments as well to work properly in such scenarios. How did you find this out? By code/spec inspection, or do you actually have the device that exposes this problem? Thanks, -- Jiri Kosina SUSE Labs -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html