summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDr. Stephen Henson <steve@openssl.org>2012-04-23 20:35:55 +0000
committerDr. Stephen Henson <steve@openssl.org>2012-04-23 20:35:55 +0000
commit8d038a08fbd3eb4b2f0a5bf1987bb6689a2a943c (patch)
tree745dfab31f4f0795f57458a58452d705a935524a
parent747c6ffda45c00d0bf5ec0d375b68896c02ee770 (diff)
The fix for CVE-2012-2110 did not take into account that the
'len' argument to BUF_MEM_grow and BUF_MEM_grow_clean is an int in OpenSSL 0.9.8, making it still vulnerable. Fix by rejecting negative len parameter. Thanks to the many people who reported this bug and to Tomas Hoger <thoger@redhat.com> for supplying the fix.
-rw-r--r--CHANGES6
-rw-r--r--crypto/buffer/buffer.c10
2 files changed, 15 insertions, 1 deletions
diff --git a/CHANGES b/CHANGES
index 56d204e9ba..2038f9d49a 100644
--- a/CHANGES
+++ b/CHANGES
@@ -4,7 +4,11 @@
Changes between 0.9.8v and 0.9.8w [xx XXX xxxx]
- *)
+ *) The fix for CVE-2012-2110 did not take into account that the
+ 'len' argument to BUF_MEM_grow and BUF_MEM_grow_clean is an
+ int in OpenSSL 0.9.8, making it still vulnerable. Fix by
+ rejecting negative len parameter. (CVE-2012-2131)
+ [Tomas Hoger <thoger@redhat.com>]
Changes between 0.9.8u and 0.9.8v [19 Apr 2012]
diff --git a/crypto/buffer/buffer.c b/crypto/buffer/buffer.c
index 1f09cba061..3b4c79f704 100644
--- a/crypto/buffer/buffer.c
+++ b/crypto/buffer/buffer.c
@@ -99,6 +99,11 @@ int BUF_MEM_grow(BUF_MEM *str, int len)
char *ret;
unsigned int n;
+ if (len < 0)
+ {
+ BUFerr(BUF_F_BUF_MEM_GROW,ERR_R_MALLOC_FAILURE);
+ return 0;
+ }
if (str->length >= len)
{
str->length=len;
@@ -141,6 +146,11 @@ int BUF_MEM_grow_clean(BUF_MEM *str, int len)
char *ret;
unsigned int n;
+ if (len < 0)
+ {
+ BUFerr(BUF_F_BUF_MEM_GROW_CLEAN,ERR_R_MALLOC_FAILURE);
+ return 0;
+ }
if (str->length >= len)
{
memset(&str->data[len],0,str->length-len);