diff --git a/server/reds.c b/server/reds.c index f40b65c1..86a33d53 100644 --- a/server/reds.c +++ b/server/reds.c @@ -2202,7 +2202,8 @@ static void reds_handle_read_header_done(void *opaque) reds->peer_minor_version = header->minor_version; - if (header->size < sizeof(SpiceLinkMess)) { + /* the check for 4096 is to avoid clients to cause arbitrary big memory allocations */ + if (header->size < sizeof(SpiceLinkMess) || header->size > 4096) { reds_send_link_error(link, SPICE_LINK_ERR_INVALID_DATA); spice_warning("bad size %u", header->size); reds_link_free(link);