6b6353b
From a908d213557cfbe874b7bd1ae3a1b0d3c05c29e9 Mon Sep 17 00:00:00 2001
6b6353b
From: David Herrmann <dh.herrmann@gmail.com>
6b6353b
Date: Tue, 23 Sep 2014 13:51:42 +0200
6b6353b
Subject: [PATCH] terminal: verify kernel-returned DRM events are not truncated
6b6353b
6b6353b
Make sure the kernel always returns events properly. This is guaranteed
6b6353b
right now, otherwise, we do something really wrong. But lets be sure and
6b6353b
verify the received values properly. This also silences some coverity
6b6353b
warnings.
6b6353b
---
6b6353b
 src/libsystemd-terminal/grdev-drm.c | 2 +-
6b6353b
 1 file changed, 1 insertion(+), 1 deletion(-)
6b6353b
6b6353b
diff --git a/src/libsystemd-terminal/grdev-drm.c b/src/libsystemd-terminal/grdev-drm.c
6b6353b
index 5c65c096de..5393ebf988 100644
6b6353b
--- a/src/libsystemd-terminal/grdev-drm.c
6b6353b
+++ b/src/libsystemd-terminal/grdev-drm.c
6b6353b
@@ -2223,7 +2223,7 @@ static int grdrm_card_io_fn(sd_event_source *s, int fd, uint32_t revents, void *
6b6353b
                 for (i = 0; i < l; i += event->length) {
6b6353b
                         event = (void*)&buf[i];
6b6353b
 
6b6353b
-                        if (i + event->length > l) {
6b6353b
+                        if (i + (ssize_t)sizeof(*event) > l || i + (ssize_t)event->length > l) {
6b6353b
                                 log_debug("grdrm: %s/%s: truncated event", card->base.session->name, card->base.name);
6b6353b
                                 break;
6b6353b
                         }