Hi Ryan, On Wed, Sep 11, 2013 at 09:32:52AM +1000, Ryan Mallon wrote: > Rework the code in uinput_inject_event so that it matches the code in > evdev_write and allows injecting more than one event, or zero events. > > Signed-off-by: Ryan Mallon <rmallon@xxxxxxxxx> > --- > drivers/input/misc/uinput.c | 14 +++++++++----- > 1 file changed, 9 insertions(+), 5 deletions(-) > > diff --git a/drivers/input/misc/uinput.c b/drivers/input/misc/uinput.c > index a0a4bba..6aea346 100644 > --- a/drivers/input/misc/uinput.c > +++ b/drivers/input/misc/uinput.c > @@ -434,16 +434,20 @@ static ssize_t uinput_inject_event(struct uinput_device *udev, > const char __user *buffer, size_t count) > { > struct input_event ev; > + size_t bytes = 0; > > - if (count < input_event_size()) > + if (count != 0 && count < input_event_size()) > return -EINVAL; > > - if (input_event_from_user(buffer, &ev)) > - return -EFAULT; > + while (bytes + input_event_size() <= count) { > + if (input_event_from_user(buffer + bytes, &ev)) > + return -EFAULT; Unless the failure is in the very first packet we should tell the user how many bytes we have transferred successfully instead of returning -EFAULT. Thanks. -- Dmitry -- 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