connection: fix demarshal of invalid header
authorPekka Paalanen <pekka.paalanen@collabora.com>
Wed, 6 Mar 2019 11:42:23 +0000 (13:42 +0200)
committerPekka Paalanen <pekka.paalanen@collabora.com>
Wed, 13 Mar 2019 10:39:16 +0000 (12:39 +0200)
commitbace3cd819798571189671b68590adff3fd40997
tree039cfca495d742b269649c7fc13e03a7ed6f87e9
parent446047edf2da8b3ce899f28253f14dff18d9f4d7
connection: fix demarshal of invalid header

The size argument to wl_connection_demarshal() is taken from the message by the
caller wl_client_connection_data(), therefore 'size' is untrusted data
controllable by a Wayland client. The size should always be at least the header
size, otherwise the header is invalid.

If the size is smaller than header size, it leads to reading past the end of
allocated memory. Furthermore if size is zero, wl_closure_init() changes
behaviour and leaves num_arrays uninitialized, leading to access of arbitrary
memory.

Check that 'size' fits at least the header. The space for arguments is already
properly checked.

This makes the request_bogus_size test free of errors under Valgrind.

Fixes: https://gitlab.freedesktop.org/wayland/wayland/issues/52

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
Reviewed-by: Simon Ser <contact@emersion.fr>
src/connection.c
tests/connection-test.c