mirror of
https://git.yoctoproject.org/poky
synced 2026-05-31 12:49:46 +00:00
curl: Security fix for CVE-2016-9586
Affected versions: libcurl 7.1 to and including 7.51.0 Not affected versions: libcurl >= 7.52.0 (From OE-Core rev: 559ccc284987846c5b266cc2bc5ecd91c1c155f9) Signed-off-by: Thiruvadi Rajaraman <trajaraman@mvista.com> Signed-off-by: Armin Kuster <akuster@mvista.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
c4339c0e74
commit
6131edc2c9
@@ -0,0 +1,66 @@
|
|||||||
|
commit 3ab3c16db6a5674f53cf23d56512a405fde0b2c9
|
||||||
|
Author: Daniel Stenberg <daniel@haxx.se>
|
||||||
|
Date: Tue Nov 8 15:32:37 2016 +0100
|
||||||
|
|
||||||
|
printf: fix floating point buffer overflow issues
|
||||||
|
|
||||||
|
... and add a bunch of floating point printf tests
|
||||||
|
|
||||||
|
Upstream-Status: Backport
|
||||||
|
https://curl.haxx.se/CVE-2016-9586.patch
|
||||||
|
dropped the tests as they require more changes to work.
|
||||||
|
|
||||||
|
CVE: CVE-2016-9586
|
||||||
|
Signed-off-by: Thiruvadi Rajaraman <trajaraman@mvista.com>
|
||||||
|
|
||||||
|
Index: curl-7.50.1/lib/mprintf.c
|
||||||
|
===================================================================
|
||||||
|
--- curl-7.50.1.orig/lib/mprintf.c 2017-06-15 18:24:08.934720707 +0530
|
||||||
|
+++ curl-7.50.1/lib/mprintf.c 2017-06-15 18:24:09.318720721 +0530
|
||||||
|
@@ -92,7 +92,8 @@
|
||||||
|
# define mp_uintmax_t unsigned long
|
||||||
|
#endif
|
||||||
|
|
||||||
|
-#define BUFFSIZE 256 /* buffer for long-to-str and float-to-str calcs */
|
||||||
|
+#define BUFFSIZE 326 /* buffer for long-to-str and float-to-str calcs, should
|
||||||
|
+ fit negative DBL_MAX (317 letters) */
|
||||||
|
#define MAX_PARAMETERS 128 /* lame static limit */
|
||||||
|
|
||||||
|
#ifdef __AMIGA__
|
||||||
|
@@ -910,12 +911,25 @@
|
||||||
|
*fptr = 0;
|
||||||
|
|
||||||
|
if(width >= 0) {
|
||||||
|
+ if(width >= (long)sizeof(work))
|
||||||
|
+ width = sizeof(work)-1;
|
||||||
|
/* RECURSIVE USAGE */
|
||||||
|
len = curl_msnprintf(fptr, left, "%ld", width);
|
||||||
|
fptr += len;
|
||||||
|
left -= len;
|
||||||
|
}
|
||||||
|
if(prec >= 0) {
|
||||||
|
+ /* for each digit in the integer part, we can have one less
|
||||||
|
+ precision */
|
||||||
|
+ size_t maxprec = sizeof(work) - 2;
|
||||||
|
+ double val = p->data.dnum;
|
||||||
|
+ while(val >= 10.0) {
|
||||||
|
+ val /= 10;
|
||||||
|
+ maxprec--;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if(prec > (long)maxprec)
|
||||||
|
+ prec = maxprec-1;
|
||||||
|
/* RECURSIVE USAGE */
|
||||||
|
len = curl_msnprintf(fptr, left, ".%ld", prec);
|
||||||
|
fptr += len;
|
||||||
|
@@ -935,7 +949,9 @@
|
||||||
|
/* NOTE NOTE NOTE!! Not all sprintf implementations return number of
|
||||||
|
output characters */
|
||||||
|
(sprintf)(work, formatbuf, p->data.dnum);
|
||||||
|
-
|
||||||
|
+#ifdef CURLDEBUG
|
||||||
|
+ assert(strlen(work) <= sizeof(work));
|
||||||
|
+#endif
|
||||||
|
for(fptr=work; *fptr; fptr++)
|
||||||
|
OUTCHAR(*fptr);
|
||||||
|
}
|
||||||
@@ -21,6 +21,7 @@ SRC_URI += " file://configure_ac.patch \
|
|||||||
file://CVE-2016-8623.patch \
|
file://CVE-2016-8623.patch \
|
||||||
file://CVE-2016-8617.patch \
|
file://CVE-2016-8617.patch \
|
||||||
file://CVE-2016-8624.patch \
|
file://CVE-2016-8624.patch \
|
||||||
|
file://CVE-2016-9586.patch \
|
||||||
"
|
"
|
||||||
|
|
||||||
SRC_URI[md5sum] = "015f6a0217ca6f2c5442ca406476920b"
|
SRC_URI[md5sum] = "015f6a0217ca6f2c5442ca406476920b"
|
||||||
|
|||||||
Reference in New Issue
Block a user