lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4D407589.2030909@teksavvy.com>
Date:	Wed, 26 Jan 2011 14:27:05 -0500
From:	Mark Lord <kernel@...savvy.com>
To:	Dmitry Torokhov <dmitry.torokhov@...il.com>
CC:	Mauro Carvalho Chehab <mchehab@...hat.com>,
	Gerd Hoffmann <kraxel@...hat.com>,
	Linus Torvalds <torvalds@...ux-foundation.org>,
	Linux Kernel <linux-kernel@...r.kernel.org>,
	linux-input@...r.kernel.org, linux-media@...r.kernel.org
Subject: Re: 2.6.36/2.6.37: broken compatibility with userspace input-utils
 ?

On 11-01-26 01:24 PM, Dmitry Torokhov wrote:
> On Wed, Jan 26, 2011 at 03:29:09PM -0200, Mauro Carvalho Chehab wrote:
>> Em 26-01-2011 14:51, Dmitry Torokhov escreveu:
>>> On Wed, Jan 26, 2011 at 12:18:29PM -0200, Mauro Carvalho Chehab wrote:
>>>> diff --git a/input.c b/input.c
>>>> index d57a31e..a9bd5e8 100644
>>>> --- a/input.c
>>>> +++ b/input.c
>>>> @@ -101,8 +101,8 @@ int device_open(int nr, int verbose)
>>>>  		close(fd);
>>>>  		return -1;
>>>>  	}
>>>> -	if (EV_VERSION != version) {
>>>> -		fprintf(stderr, "protocol version mismatch (expected %d, got %d)\n",
>>>> +	if (EV_VERSION > version) {
>>>> +		fprintf(stderr, "protocol version mismatch (expected >= %d, got %d)\n",
>>>>  			EV_VERSION, version);
>>>
>>> Please do not do this. It causes check to "float" depending on the
>>> version of kernel headers it was compiled against.
>>>
>>> The check should be against concrete version (0x10000 in this case).
>>
>> The idea here is to not prevent it to load if version is 0x10001.
>> This is actually the only change that it is really needed (after applying
>> your KEY_RESERVED patch to 2.6.37) for the tool to work. Reverting it causes
>> the error:
> 
> You did not understand. When comparing against EV_VERSION, if you
> compile on 2.6.32 you are comparing with 0x10000. If you are compiling
> on 2.6.37 you are comparing with 0x10001 as EV_VERSION value changes
> (not the value returned by EVIOCGVERSION, the value of the _define_
> itself).
> 
> The proper check is:
> 
> #define EVDEV_MIN_VERSION 0x10000
> 	if (version < EVDEV_MIN_VERSION) {
> 		fprintf(stderr,
> 			"protocol version mismatch (need at least %d, got %d)\n",
> 			EVDEV_MIN_VERSION, version);
> 		...
> 	}


Guys, NO!

The proper check is actually to remove all of that silly VERSION testing
from the userspace binary.  And then have it try EVIOCGKEYCODE_V2 first.
If EVIOCGKEYCODE_V2 fails (-ENOTTY, -EINVAL, or -ENOSYS), then
have it fall back to trying to use EVIOCGKEYCODE.

Of course this does assume that the new EVIOCGKEYCODE_V2 interface uses
correct ioctl return values..

Cheers
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ