Thread (6 messages) 6 messages, 2 authors, 2013-09-11

Re: [PATCH 1/2] uinput: Support injecting multiple events in one write() call

flat view

From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date: 2013-09-11 00:14:33
Also in: lkml

Hi Ryan,

On Wed, Sep 11, 2013 at 09:32:52AM +1000, Ryan Mallon wrote:
quoted hunk ↗ jump to hunk
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 <redacted>
---
 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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help