~ubuntu-branches/ubuntu/lucid/libxfont/lucid-security

« back to all changes in this revision

Viewing changes to debian/patches/CVE-2015-1804.patch

  • Committer: Package Import Robot
  • Author(s): Marc Deslauriers
  • Date: 2015-03-18 07:33:52 UTC
  • Revision ID: package-import@ubuntu.com-20150318073352-mtauev9hbwork6fz
Tags: 1:1.4.1-1ubuntu0.4
* SECURITY UPDATE: arbitrary code exection via invalid property count
  - debian/patches/CVE-2015-1802.patch: check for integer overflow in
    src/bitmap/bdfread.c.
  - CVE-2015-1802
* SECURITY UPDATE: arbitrary code execution via bitmap data parse failure
  - debian/patches/CVE-2015-1803.patch: bail out if bitmap can't be read
    in src/bitmap/bdfread.c.
  - CVE-2015-1803
* SECURITY UPDATE: arbitrary code execution via invalid metrics
  - debian/patches/CVE-2015-1804.patch: ensure metrics fit in struct in
    src/bitmap/bdfread.c.
  - CVE-2015-1804

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
From 2351c83a77a478b49cba6beb2ad386835e264744 Mon Sep 17 00:00:00 2001
 
2
From: Alan Coopersmith <alan.coopersmith@oracle.com>
 
3
Date: Fri, 6 Mar 2015 22:54:58 -0800
 
4
Subject: bdfReadCharacters: ensure metrics fit into xCharInfo struct
 
5
 [CVE-2015-1804]
 
6
 
 
7
We use 32-bit ints to read from the bdf file, but then try to stick
 
8
into a 16-bit int in the xCharInfo struct, so make sure they won't
 
9
overflow that range.
 
10
 
 
11
Found by afl-1.24b.
 
12
 
 
13
v2: Verify that additions won't overflow 32-bit int range either.
 
14
v3: As Julien correctly observes, the previous check for bh & bw not
 
15
    being < 0 reduces the number of cases we need to check for overflow.
 
16
 
 
17
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
 
18
Reviewed-by: Julien Cristau <jcristau@debian.org>
 
19
 
 
20
Index: libxfont-1.4.1/src/bitmap/bdfread.c
 
21
===================================================================
 
22
--- libxfont-1.4.1.orig/src/bitmap/bdfread.c    2015-03-18 07:33:46.638895210 -0400
 
23
+++ libxfont-1.4.1/src/bitmap/bdfread.c 2015-03-18 07:33:46.638895210 -0400
 
24
@@ -65,8 +65,16 @@
 
25
 
 
26
 #if HAVE_STDINT_H
 
27
 #include <stdint.h>
 
28
-#elif !defined(INT32_MAX)
 
29
-#define INT32_MAX 0x7fffffff
 
30
+#else
 
31
+# ifndef INT32_MAX
 
32
+#  define INT32_MAX 0x7fffffff
 
33
+# endif
 
34
+# ifndef INT16_MAX
 
35
+#  define INT16_MAX 0x7fff
 
36
+# endif
 
37
+# ifndef INT16_MIN
 
38
+#  define INT16_MIN (0 - 0x8000)
 
39
+# endif
 
40
 #endif
 
41
 
 
42
 #define INDICES 256
 
43
@@ -419,6 +427,12 @@
 
44
            bdfError("DWIDTH y value must be zero\n");
 
45
            goto BAILOUT;
 
46
        }
 
47
+       /* xCharInfo metrics are stored as INT16 */
 
48
+       if ((wx < 0) || (wx > INT16_MAX)) {
 
49
+           bdfError("character '%s' has out of range width, %d\n",
 
50
+                    charName, wx);
 
51
+           goto BAILOUT;
 
52
+       }
 
53
        line = bdfGetLine(file, lineBuf, BDFLINELEN);
 
54
        if ((!line) || (sscanf((char *) line, "BBX %d %d %d %d", &bw, &bh, &bl, &bb) != 4)) {
 
55
            bdfError("bad 'BBX'\n");
 
56
@@ -429,6 +443,14 @@
 
57
                     charName, bw, bh);
 
58
            goto BAILOUT;
 
59
        }
 
60
+       /* xCharInfo metrics are read as int, but stored as INT16 */
 
61
+       if ((bl > INT16_MAX) || (bl < INT16_MIN) ||
 
62
+           (bb > INT16_MAX) || (bb < INT16_MIN) ||
 
63
+           (bw > (INT16_MAX - bl)) || (bh > (INT16_MAX - bb))) {
 
64
+           bdfError("character '%s' has out of range metrics, %d %d %d %d\n",
 
65
+                    charName, bl, (bl+bw), (bh+bb), -bb);
 
66
+           goto BAILOUT;
 
67
+       }
 
68
        line = bdfGetLine(file, lineBuf, BDFLINELEN);
 
69
        if ((line) && (bdfIsPrefix(line, "ATTRIBUTES"))) {
 
70
            for (p = line + strlen("ATTRIBUTES ");