mirror of https://lore.kernel.org/lkml/
 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	[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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome