Re: [PATCH v3] Input: uinput - add new UINPUT_DEV_SETUP and UI_ABS_SETUP ioctl

From: David Herrmann
Date: Sun Oct 25 2015 - 05:39:17 EST


Hi

On Sun, Oct 25, 2015 at 12:53 AM, Dmitry Torokhov
<dmitry.torokhov@xxxxxxxxx> wrote:
> Hi Benjamin,
>
> On Tue, Aug 25, 2015 at 11:12:59AM -0400, Benjamin Tissoires wrote:
>> +static int uinput_abs_setup(struct uinput_device *udev,
>> + struct uinput_setup __user *arg, size_t size)
>> +{
>> + struct uinput_abs_setup setup = {};
>> + struct input_dev *dev;
>> +
>> + if (size > sizeof(setup))
>> + return -E2BIG;
>> + if (udev->state == UIST_CREATED)
>> + return -EINVAL;
>> + if (copy_from_user(&setup, arg, size))
>> + return -EFAULT;
>> + if (setup.code > ABS_MAX)
>> + return -ERANGE;
>> +
>> + dev = udev->dev;
>> +
>> + input_alloc_absinfo(dev);
>> + if (!dev->absinfo)
>> + return -ENOMEM;
>> +
>> + set_bit(setup.code, dev->absbit);
>> + dev->absinfo[setup.code] = setup.absinfo;
>> +
>> + /*
>> + * We restore the state to UIST_NEW_DEVICE because the user has to call
>> + * UI_DEV_SETUP in the last place before UI_DEV_CREATE to check the
>> + * validity of the absbits.
>> + */
>
> Do we have to be this strict? It seems to me that with the new IOCTLs
> you naturally want to use the new ioctl to setup the device, then adjust
> various axes and bits and then validate everything.

Indeed, we now force the order to be abs-setup first, then
device-setup as last step. Appended is a follow-up patch to cleanup
ABS handling in uinput. It is untested. Benjamin, care to give it a
spin?

Thanks
David

----