Messages in this thread Patch in this message | | | From | Dima Zavin <> | Subject | [PATCH 1/3] input: evdev: only allow reading events if a full packet is present | Date | Fri, 16 Dec 2011 10:07:04 -0800 |
| |
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
| |