diff options
-rw-r--r-- | meta-oe/recipes-support/gd/gd/CVE-2016-10166.patch | 60 | ||||
-rw-r--r-- | meta-oe/recipes-support/gd/gd_2.2.3.bb | 3 |
2 files changed, 62 insertions, 1 deletions
diff --git a/meta-oe/recipes-support/gd/gd/CVE-2016-10166.patch b/meta-oe/recipes-support/gd/gd/CVE-2016-10166.patch new file mode 100644 index 0000000000..7ccfbeabc2 --- /dev/null +++ b/meta-oe/recipes-support/gd/gd/CVE-2016-10166.patch @@ -0,0 +1,60 @@ +From c92240c1670c20c2f854761d3a89ab61dd158c91 Mon Sep 17 00:00:00 2001 +From: "Christoph M. Becker" <cmbecker69@gmx.de> +Date: Sat, 6 Aug 2016 10:08:53 +0200 +Subject: [PATCH] Fix potential unsigned underflow + +No need to decrease `u`, so we don't do it. While we're at it, we also factor +out the overflow check of the loop, what improves performance and readability. + +This issue has been reported by Stefan Esser to security@libgd.org. + +Upstream-Status: Backport +CVE: CVE-2016-10166 + +Signed-off-by: Catalin Enache <catalin.enache@windriver.com> +--- + src/gd_interpolation.c | 19 ++++++++++--------- + 1 file changed, 10 insertions(+), 9 deletions(-) + +diff --git a/src/gd_interpolation.c b/src/gd_interpolation.c +index 7e7943d..9944349 100644 +--- a/src/gd_interpolation.c ++++ b/src/gd_interpolation.c +@@ -829,8 +829,13 @@ static inline LineContribType * _gdContributionsAlloc(unsigned int line_length, + { + unsigned int u = 0; + LineContribType *res; +- int overflow_error = 0; ++ size_t weights_size; + ++ if (overflow2(windows_size, sizeof(double))) { ++ return NULL; ++ } else { ++ weights_size = windows_size * sizeof(double); ++ } + res = (LineContribType *) gdMalloc(sizeof(LineContribType)); + if (!res) { + return NULL; +@@ -847,15 +852,11 @@ static inline LineContribType * _gdContributionsAlloc(unsigned int line_length, + return NULL; + } + for (u = 0 ; u < line_length ; u++) { +- if (overflow2(windows_size, sizeof(double))) { +- overflow_error = 1; +- } else { +- res->ContribRow[u].Weights = (double *) gdMalloc(windows_size * sizeof(double)); +- } +- if (overflow_error == 1 || res->ContribRow[u].Weights == NULL) { ++ res->ContribRow[u].Weights = (double *) gdMalloc(weights_size); ++ if (res->ContribRow[u].Weights == NULL) { + unsigned int i; +- u--; +- for (i=0;i<=u;i++) { ++ ++ for (i=0;i<u;i++) { + gdFree(res->ContribRow[i].Weights); + } + gdFree(res->ContribRow); +-- +2.10.2 + diff --git a/meta-oe/recipes-support/gd/gd_2.2.3.bb b/meta-oe/recipes-support/gd/gd_2.2.3.bb index c5aff66167..4ff6b756a6 100644 --- a/meta-oe/recipes-support/gd/gd_2.2.3.bb +++ b/meta-oe/recipes-support/gd/gd_2.2.3.bb @@ -13,7 +13,8 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=c97638cafd3581eb87abd37332137669" DEPENDS = "freetype libpng jpeg zlib tiff" SRC_URI = "git://github.com/libgd/libgd.git;branch=GD-2.2 \ - file://fix-gcc-unused-functions.patch" + file://fix-gcc-unused-functions.patch \ + file://CVE-2016-10166.patch" SRCREV = "46ceef5970bf3a847ff61d1bdde7501d66c11d0c" |