[RFC wayland 09/12] connection: return error on buffer-overflow during read

David Herrmann dh.herrmann at googlemail.com
Thu Oct 11 14:37:50 PDT 2012


wl_connection_read() assumes that the caller dispatched all messages
before calling it. wl_buffer_put_iov() does only provide enough room so we
fill the buffer. So the only case when the buffer overflows, is when a
previous read filled up the buffer but we couldn't parse a single message
from it. In this case, the client sent a message bigger than our buffer
and we should return an error and close the connection.

Signed-off-by: David Herrmann <dh.herrmann at googlemail.com>
---
 src/connection.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/connection.c b/src/connection.c
index e9d7c72..f478832 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -336,6 +336,11 @@ wl_connection_read(struct wl_connection *connection)
 		return -1;
 
 	connection->in.head += len;
+	len = wl_buffer_size(&connection->in);
+	if (len > (ssize_t)sizeof(connection->in.data)) {
+		errno = EOVERFLOW;
+		return -1;
+	}
 
 	return connection->in.head - connection->in.tail;
 }
-- 
1.7.12.2



More information about the wayland-devel mailing list