Blame SOURCES/0001-integer-overflow-in-read_packet-CVE-2013-2064.patch

5b67f4
From 1b33867fa996034deb50819ae54640be501f8d20 Mon Sep 17 00:00:00 2001
5b67f4
From: Alan Coopersmith <alan.coopersmith@oracle.com>
5b67f4
Date: Wed, 1 May 2013 17:59:31 -0700
5b67f4
Subject: [PATCH] integer overflow in read_packet() [CVE-2013-2064]
5b67f4
5b67f4
Ensure that when calculating the size of the incoming response from the
5b67f4
Xserver, we don't overflow the integer used in the calculations when we
5b67f4
multiply the int32_t length by 4 and add it to the default response size.
5b67f4
5b67f4
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
5b67f4
---
5b67f4
 src/xcb_in.c | 13 +++++++++----
5b67f4
 1 file changed, 9 insertions(+), 4 deletions(-)
5b67f4
5b67f4
diff --git a/src/xcb_in.c b/src/xcb_in.c
5b67f4
index b810783..8a7af92 100644
5b67f4
--- a/src/xcb_in.c
5b67f4
+++ b/src/xcb_in.c
5b67f4
@@ -93,8 +93,9 @@ static void remove_finished_readers(reader_list **prev_reader, uint64_t complete
5b67f4
 static int read_packet(xcb_connection_t *c)
5b67f4
 {
5b67f4
     xcb_generic_reply_t genrep;
5b67f4
-    int length = 32;
5b67f4
-    int eventlength = 0; /* length after first 32 bytes for GenericEvents */
5b67f4
+    uint64_t length = 32;
5b67f4
+    uint64_t eventlength = 0; /* length after first 32 bytes for GenericEvents */
5b67f4
+    uint64_t bufsize;
5b67f4
     void *buf;
5b67f4
     pending_reply *pend = 0;
5b67f4
     struct event_list *event;
5b67f4
@@ -169,8 +170,12 @@ static int read_packet(xcb_connection_t *c)
5b67f4
     if ((genrep.response_type & 0x7f) == XCB_XGE_EVENT)
5b67f4
         eventlength = genrep.length * 4;
5b67f4
 
5b67f4
-    buf = malloc(length + eventlength +
5b67f4
-            (genrep.response_type == XCB_REPLY ? 0 : sizeof(uint32_t)));
5b67f4
+    bufsize = length + eventlength +
5b67f4
+        (genrep.response_type == XCB_REPLY ? 0 : sizeof(uint32_t));
5b67f4
+    if (bufsize < INT32_MAX)
5b67f4
+        buf = malloc((size_t) bufsize);
5b67f4
+    else
5b67f4
+        buf = NULL;
5b67f4
     if(!buf)
5b67f4
     {
5b67f4
         _xcb_conn_shutdown(c, XCB_CONN_CLOSED_MEM_INSUFFICIENT);
5b67f4
-- 
5b67f4
1.8.1.4
5b67f4