Sophie

Sophie

distrib > Mandriva > 2009.0 > i586 > by-pkgid > 132cd009b832939558135d1f5aafae4a > files > 7

qemu-0.9.1-0.r5137.1.2mdv2009.0.src.rpm

Fix CORE-2008-1210 VNC DoS

If the client sends us a limit of zero, handle appropriately.

Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>

diff --git a/vnc.c b/vnc.c
index 3a7d762..575fd68 100644
--- a/vnc.c
+++ b/vnc.c
@@ -1503,10 +1503,13 @@ static int protocol_client_msg(VncState *vs, uint8_t *data, size_t len)
 	if (len == 1)
 	    return 4;
 
-	if (len == 4)
-	    return 4 + (read_u16(data, 2) * 4);
+	if (len == 4) {
+            limit = read_u16(data, 2);
+            if (limit > 0)
+                return 4 + (limit * 4);
+        } else
+            limit = read_u16(data, 2);
 
-	limit = read_u16(data, 2);
 	for (i = 0; i < limit; i++) {
 	    int32_t val = read_s32(data, 4 + (i * 4));
 	    memcpy(data + 4 + (i * 4), &val, sizeof(val));