From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933346Ab1J1Ukb (ORCPT ); Fri, 28 Oct 2011 16:40:31 -0400 Received: from mail-yw0-f46.google.com ([209.85.213.46]:53503 "EHLO mail-yw0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755651Ab1J1Uk1 (ORCPT ); Fri, 28 Oct 2011 16:40:27 -0400 Content-Type: text/plain; charset=utf-8; format=flowed; delsp=yes To: "Dmitry Torokhov" , "Jiri Kosina" Cc: "Christoph Fritz" , linux-kernel@vger.kernel.org, linux-input@vger.kernel.org, linux-usb@vger.kernel.org Subject: Re: Linux USB HID should ignore values outside Logical Minimum/Maximum range References: <1319476183.3210.12.camel@lovely> <20111024203204.GA31721@core.coreip.homeip.net> Date: Fri, 28 Oct 2011 18:40:20 -0200 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: =?utf-8?Q?Denilson_Figueiredo_de_S=C3=A1?= Message-ID: In-Reply-To: User-Agent: Opera Mail/11.51 (Linux) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 28 Oct 2011 14:23:17 -0200, Jiri Kosina wrote: > On the other hand I feel like just dropping the report on the floor > should be the proper thing to do. I'd say not the entire report, but just the invalid fields. The HID specification (HID1_11.pdf) talks about "Null Values" at the section 5.10 (page 20). [quote] 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. [/quote] (sidenote: Why didn't I mention this spec earlier? Because I knew I have read that information somewhere, but didn't find it again until today.) > Christoph, how about the (untested at my side yet) patch below? It'd be > nice if you could test with the device you are seeing the problem with > and let me know. I can't test it *right now*, but I can probably test it in a week or two. > + /* Ignore absolute values that are out of bounds */ > + if ((usage->type == EV_ABS && (value < field->logical_minimum || > + value > field->logical_maximum))) { Given what the HID spec says (as I quoted above), I'd change this condition to just: > + if (value < field->logical_minimum || > + value > field->logical_maximum) { On the other hand, HID spec also defines the "Null" bit of Input fields at page 31. This Null bit seems redundant for me, as (in my understanding) any value outside the range is automatically a null value. We wouldn't need a Null bit for that. Anyway, another solution is to change that condition to something like this: > + if ( THIS_INPUT_FIELD_HAS_NULL_BIT_SET && > + (value < field->logical_minimum || > + value > field->logical_maximum)) { What do you think? -- Denilson Figueiredo de Sá Rio de Janeiro - Brasil