~ubuntu-branches/ubuntu/lucid/ppp/lucid-security

« back to all changes in this revision

Viewing changes to debian/patches/CVE-2014-3158.patch

  • Committer: Package Import Robot
  • Author(s): Marc Deslauriers
  • Date: 2014-11-26 07:50:57 UTC
  • Revision ID: package-import@ubuntu.com-20141126075057-cxeqazs9vluoungy
Tags: 2.4.5~git20081126t100229-0ubuntu3.1
* SECURITY UPDATE: possible privilege escalation via option parsing
  - debian/patches/CVE-2014-3158.patch: fix integer overflow in
    pppd/options.c.
  - CVE-2014-3158

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
From 7658e8257183f062dc01f87969c140707c7e52cb Mon Sep 17 00:00:00 2001
 
2
From: Paul Mackerras <paulus@samba.org>
 
3
Date: Fri, 1 Aug 2014 16:05:42 +1000
 
4
Subject: [PATCH] pppd: Eliminate potential integer overflow in option parsing
 
5
 
 
6
When we are reading in a word from an options file, we maintain a count
 
7
of the length we have seen so far in 'len', which is an int.  When len
 
8
exceeds MAXWORDLEN - 1 (i.e. 1023) we cease storing characters in the
 
9
buffer but we continue to increment len.  Since len is an int, it will
 
10
wrap around to -2147483648 after it reaches 2147483647.  At that point
 
11
our test of (len < MAXWORDLEN-1) will succeed and we will start writing
 
12
characters to memory again.
 
13
 
 
14
This may enable an attacker to overwrite the heap and thereby corrupt
 
15
security-relevant variables.  For this reason it has been assigned a
 
16
CVE identifier, CVE-2014-3158.
 
17
 
 
18
This fixes the bug by ceasing to increment len once it reaches MAXWORDLEN.
 
19
 
 
20
Reported-by: Lee Campbell <leecam@google.com>
 
21
Signed-off-by: Paul Mackerras <paulus@samba.org>
 
22
---
 
23
 pppd/options.c | 10 ++++++----
 
24
 1 file changed, 6 insertions(+), 4 deletions(-)
 
25
 
 
26
Index: ppp-2.4.5/pppd/options.c
 
27
===================================================================
 
28
--- ppp-2.4.5.orig/pppd/options.c       2014-11-25 16:17:34.485481218 -0500
 
29
+++ ppp-2.4.5/pppd/options.c    2014-11-25 16:17:34.485481218 -0500
 
30
@@ -1290,9 +1290,10 @@
 
31
            /*
 
32
             * Store the resulting character for the escape sequence.
 
33
             */
 
34
-           if (len < MAXWORDLEN-1)
 
35
+           if (len < MAXWORDLEN) {
 
36
                word[len] = value;
 
37
-           ++len;
 
38
+               ++len;
 
39
+           }
 
40
 
 
41
            if (!got)
 
42
                c = getc(f);
 
43
@@ -1325,9 +1326,10 @@
 
44
        /*
 
45
         * An ordinary character: store it in the word and get another.
 
46
         */
 
47
-       if (len < MAXWORDLEN-1)
 
48
+       if (len < MAXWORDLEN) {
 
49
            word[len] = c;
 
50
-       ++len;
 
51
+           ++len;
 
52
+       }
 
53
 
 
54
        c = getc(f);
 
55
     }