Hi Peter, Le mercredi 20 décembre 2023 à 09:51 +1000, Peter Hutterer a écrit : > On Mon, Dec 18, 2023 at 11:16:53AM -0600, Chris Morgan wrote: > > From: Chris Morgan <macromorgan@xxxxxxxxxxx> > > > > Stop checking if the minimum abs value is greater than the maximum > > abs > > value. When the axis is inverted this condition is allowed. Without > > relaxing this check, it is not possible to use uinput on devices in > > userspace with an inverted axis, such as the adc-joystick found on > > many handheld gaming devices. > > As mentioned in the other thread [1] a fair bit of userspace relies > on > that general assumption so removing it will likely cause all sorts of > issues. There is some userspace that works with it though, so why restrict it artificially? The fact that some other userspace code wouldn't work with it sounds a bit irrelevant. They just never encountered that min>max usage before. And removing this check won't cause all sort of issues, why would it? It's not like the current software actively probes min>max and crash badly if it doesn't return -EINVAL... Cheers, -Paul > > Cheers, > Petre > > [1] > https://lore.kernel.org/linux-input/20231219234803.GA3396969@quokka/T/#t > > > > Signed-off-by: Chris Morgan <macromorgan@xxxxxxxxxxx> > > --- > > drivers/input/misc/uinput.c | 9 +-------- > > 1 file changed, 1 insertion(+), 8 deletions(-) > > > > diff --git a/drivers/input/misc/uinput.c > > b/drivers/input/misc/uinput.c > > index d98212d55108..e90dbf2c0b34 100644 > > --- a/drivers/input/misc/uinput.c > > +++ b/drivers/input/misc/uinput.c > > @@ -403,14 +403,7 @@ static int uinput_validate_absinfo(struct > > input_dev *dev, unsigned int code, > > min = abs->minimum; > > max = abs->maximum; > > > > - if ((min != 0 || max != 0) && max < min) { > > - printk(KERN_DEBUG > > - "%s: invalid abs[%02x] min:%d max:%d\n", > > - UINPUT_NAME, code, min, max); > > - return -EINVAL; > > - } > > - > > - if (!check_sub_overflow(max, min, &range) && abs->flat > > > range) { > > + if (!check_sub_overflow(max, min, &range) && abs->flat > > > abs(range)) { > > printk(KERN_DEBUG > > "%s: abs_flat #%02x out of range: %d > > (min:%d/max:%d)\n", > > UINPUT_NAME, code, abs->flat, min, max); > > -- > > 2.34.1 > > > >