All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] input: evdev: only allow reading events if a full packet is present
@ 2011-12-16 18:07 Dima Zavin
  2011-12-16 18:07 ` [PATCH 2/3] input: evdev: if no events and non-block, return EAGAIN not 0 Dima Zavin
  2011-12-16 18:07 ` [PATCH 3/3] input: evdev: do not block waiting for an event if fd is nonblock Dima Zavin
  0 siblings, 2 replies; 3+ messages in thread
From: Dima Zavin @ 2011-12-16 18:07 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input, linux-kernel, Dima Zavin, Jeff Brown

Without this, it was possible for the reader to get ahead of packet_head.
If the the input device generated a partial packet *right* after the
reader got ahead, then we can get into a situation where the device is
marked readable but read always returns 0 until the next packet is
finished (i.e a SYN is generated by the input driver).

This situation can also happen if we overflow the buffer while a reader
is trying to read an event out.

Cc: Jeff Brown <jeffbrown@android.com>
Signed-off-by: Dima Zavin <dima@android.com>
---
 drivers/input/evdev.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/drivers/input/evdev.c b/drivers/input/evdev.c
index 4cf2534..03344b3 100644
--- a/drivers/input/evdev.c
+++ b/drivers/input/evdev.c
@@ -369,7 +369,7 @@ static int evdev_fetch_next_event(struct evdev_client *client,
 
 	spin_lock_irq(&client->buffer_lock);
 
-	have_event = client->head != client->tail;
+	have_event = client->packet_head != client->tail;
 	if (have_event) {
 		*event = client->buffer[client->tail++];
 		client->tail &= client->bufsize - 1;
-- 
1.7.3.1


^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2011-12-16 18:07 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-12-16 18:07 [PATCH 1/3] input: evdev: only allow reading events if a full packet is present Dima Zavin
2011-12-16 18:07 ` [PATCH 2/3] input: evdev: if no events and non-block, return EAGAIN not 0 Dima Zavin
2011-12-16 18:07 ` [PATCH 3/3] input: evdev: do not block waiting for an event if fd is nonblock Dima Zavin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.