libtiff: CVE fixes
cover libtiff: CVE fixes
Fix CVE-2015-8781 CVE-2015-8784 CVE-2016-3186 CVE-2016-5321 CVE-2016-5323
The patches for CVE-2015-8781 and CVE-2015-8784 are cherry-picked from jethro branch since I found these 2 patches are also needed by tiff 4.0.6 Here is the comparing changes since 4.0.6 released, you could see these 2 patches are in the list:
https://github.com/vadz/libtiff/compare/Release-v4-0-6...master
The following changes since commit dfc016fbf13e62f7767edaf7abadf1d1b72680b2:
maintainers.inc: remove augeas (2016-08-04 20:56:11 +0100)
are available in the git repository at:
git://git.pokylinux.org/poky-contrib yzhao/tiff-cve
http://git.pokylinux.org/cgit.cgi/poky-contrib/log/?h=yzhao/tiff-cve
Armin Kuster (2):
tiff: Security fix CVE-2015-8781
tiff: Security fix CVE-2015-8784
Yi Zhao (3):
tiff: Security fix CVE-2016-3186
tiff: Security fix CVE-2016-5321
tiff: Security fix CVE-2016-5323
.../libtiff/files/CVE-2015-8781.patch | 195 +++++++++++++++++++++ .../libtiff/files/CVE-2015-8784.patch | 73 ++++++++ .../libtiff/files/CVE-2016-3186.patch | 24 +++ .../libtiff/files/CVE-2016-5321.patch | 49 ++++++ .../libtiff/files/CVE-2016-5323.patch | 107 +++++++++++ meta/recipes-multimedia/libtiff/tiff_4.0.6.bb | 5 + 6 files changed, 453 insertions(+) create mode 100644 meta/recipes-multimedia/libtiff/files/CVE-2015-8781.patch create mode 100644 meta/recipes-multimedia/libtiff/files/CVE-2015-8784.patch create mode 100644 meta/recipes-multimedia/libtiff/files/CVE-2016-3186.patch create mode 100644 meta/recipes-multimedia/libtiff/files/CVE-2016-5321.patch create mode 100644 meta/recipes-multimedia/libtiff/files/CVE-2016-5323.patch
Signature · 1 line
2.7.4
PATCH 1/5 tiff: Security fix CVE-2015-8781
From: Armin Kuster <[email protected]>
CVE-2015-8781 libtiff: out-of-bounds writes for invalid images
External Reference:
https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-8781
--- .../libtiff/files/CVE-2015-8781.patch | 195 +++++++++++++++++++++ meta/recipes-multimedia/libtiff/tiff_4.0.6.bb | 1 + 2 files changed, 196 insertions(+) create mode 100644 meta/recipes-multimedia/libtiff/files/CVE-2015-8781.patch
meta/recipes-multimedia/libtiff/files/CVE-2015-8781.patch new file +195 -0
@@ -0,0 +1,195 @@ +From aaab5c3c9d2a2c6984f23ccbc79702610439bc65 Mon Sep 17 00:00:00 2001 +From: erouault <erouault> +Date: Sun, 27 Dec 2015 16:25:11 +0000 +Subject: [PATCH] * libtiff/tif_luv.c: fix potential out-of-bound writes in + decode functions in non debug builds by replacing assert()s by regular if + checks (bugzilla #2522). Fix potential out-of-bound reads in case of short + input data. + +Upstream-Status: Backport + +https://github.com/vadz/libtiff/commit/aaab5c3c9d2a2c6984f23ccbc79702610439bc65 +hand applied Changelog changes + +CVE: CVE-2015-8781 + +Signed-off-by: Armin Kuster <[email protected]> +--- + ChangeLog | 7 +++++++ + libtiff/tif_luv.c | 55 ++++++++++++++++++++++++++++++++++++++++++++----------- + 2 files changed, 51 insertions(+), 11 deletions(-) + +Index: tiff-4.0.4/ChangeLog +=================================================================== +--- tiff-4.0.4.orig/ChangeLog ++++ tiff-4.0.4/ChangeLog +@@ -1,3 +1,10 @@ ++2015-12-27 Even Rouault <even.rouault at spatialys.com> ++ ++ * libtiff/tif_luv.c: fix potential out-of-bound writes in decode ++ functions in non debug builds by replacing assert()s by regular if ++ checks (bugzilla #2522). ++ Fix potential out-of-bound reads in case of short input data. ++ + 2015-12-26 Even Rouault <even.rouault at spatialys.com> + + * libtiff/tif_getimage.c: fix out-of-bound reads in TIFFRGBAImage +Index: tiff-4.0.4/libtiff/tif_luv.c +=================================================================== +--- tiff-4.0.4.orig/libtiff/tif_luv.c ++++ tiff-4.0.4/libtiff/tif_luv.c +@@ -202,7 +202,11 @@ LogL16Decode(TIFF* tif, uint8* op, tmsiz + if (sp->user_datafmt == SGILOGDATAFMT_16BIT) + tp = (int16*) op; + else { +- assert(sp->tbuflen >= npixels); ++ if(sp->tbuflen < npixels) { ++ TIFFErrorExt(tif->tif_clientdata, module, ++ "Translation buffer too short"); ++ return (0); ++ } + tp = (int16*) sp->tbuf; + } + _TIFFmemset((void*) tp, 0, npixels*sizeof (tp[0])); +@@ -211,9 +215,11 @@ LogL16Decode(TIFF* tif, uint8* op, tmsiz + cc = tif->tif_rawcc; + /* get each byte string */ + for (shft = 2*8; (shft -= 8) >= 0; ) { +- for (i = 0; i < npixels && cc > 0; ) ++ for (i = 0; i < npixels && cc > 0; ) { + if (*bp >= 128) { /* run */ +- rc = *bp++ + (2-128); /* TODO: potential input buffer overrun when decoding corrupt or truncated data */ ++ if( cc < 2 ) ++ break; ++ rc = *bp++ + (2-128); + b = (int16)(*bp++ << shft); + cc -= 2; + while (rc-- && i < npixels) +@@ -223,6 +229,7 @@ LogL16Decode(TIFF* tif, uint8* op, tmsiz + while (--cc && rc-- && i < npixels) + tp[i++] |= (int16)*bp++ << shft; + } ++ } + if (i != npixels) { + #if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) + TIFFErrorExt(tif->tif_clientdata, module, +@@ -268,13 +275,17 @@ LogLuvDecode24(TIFF* tif, uint8* op, tms + if (sp->user_datafmt == SGILOGDATAFMT_RAW) + tp = (uint32 *)op; + else { +- assert(sp->tbuflen >= npixels); ++ if(sp->tbuflen < npixels) { ++ TIFFErrorExt(tif->tif_clientdata, module, ++ "Translation buffer too short"); ++ return (0); ++ } + tp = (uint32 *) sp->tbuf; + } + /* copy to array of uint32 */ + bp = (unsigned char*) tif->tif_rawcp; + cc = tif->tif_rawcc; +- for (i = 0; i < npixels && cc > 0; i++) { ++ for (i = 0; i < npixels && cc >= 3; i++) { + tp[i] = bp[0] << 16 | bp[1] << 8 | bp[2]; + bp += 3; + cc -= 3; +@@ -325,7 +336,11 @@ LogLuvDecode32(TIFF* tif, uint8* op, tms + if (sp->user_datafmt == SGILOGDATAFMT_RAW) + tp = (uint32*) op; + else { +- assert(sp->tbuflen >= npixels); ++ if(sp->tbuflen < npixels) { ++ TIFFErrorExt(tif->tif_clientdata, module, ++ "Translation buffer too short"); ++ return (0); ++ } + tp = (uint32*) sp->tbuf; + } + _TIFFmemset((void*) tp, 0, npixels*sizeof (tp[0])); +@@ -334,11 +349,13 @@ LogLuvDecode32(TIFF* tif, uint8* op, tms + cc = tif->tif_rawcc; + /* get each byte string */ + for (shft = 4*8; (shft -= 8) >= 0; ) { +- for (i = 0; i < npixels && cc > 0; ) ++ for (i = 0; i < npixels && cc > 0; ) { + if (*bp >= 128) { /* run */ ++ if( cc < 2 ) ++ break; + rc = *bp++ + (2-128); + b = (uint32)*bp++ << shft; +- cc -= 2; /* TODO: potential input buffer overrun when decoding corrupt or truncated data */ ++ cc -= 2; + while (rc-- && i < npixels) + tp[i++] |= b; + } else { /* non-run */ +@@ -346,6 +363,7 @@ LogLuvDecode32(TIFF* tif, uint8* op, tms + while (--cc && rc-- && i < npixels) + tp[i++] |= (uint32)*bp++ << shft; + } ++ } + if (i != npixels) { + #if defined(__WIN32__) && (defined(_MSC_VER) || defined(__MINGW32__)) + TIFFErrorExt(tif->tif_clientdata, module, +@@ -413,6 +431,7 @@ LogLuvDecodeTile(TIFF* tif, uint8* bp, t + static int + LogL16Encode(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) + { ++ static const char module[] = "LogL16Encode"; + LogLuvState* sp = EncoderState(tif); + int shft; + tmsize_t i; +@@ -433,7 +452,11 @@ LogL16Encode(TIFF* tif, uint8* bp, tmsiz + tp = (int16*) bp; + else { + tp = (int16*) sp->tbuf; +- assert(sp->tbuflen >= npixels); ++ if(sp->tbuflen < npixels) { ++ TIFFErrorExt(tif->tif_clientdata, module, ++ "Translation buffer too short"); ++ return (0); ++ } + (*sp->tfunc)(sp, bp, npixels); + } + /* compress each byte string */ +@@ -506,6 +529,7 @@ LogL16Encode(TIFF* tif, uint8* bp, tmsiz + static int + LogLuvEncode24(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) + { ++ static const char module[] = "LogLuvEncode24"; + LogLuvState* sp = EncoderState(tif); + tmsize_t i; + tmsize_t npixels; +@@ -521,7 +545,11 @@ LogLuvEncode24(TIFF* tif, uint8* bp, tms + tp = (uint32*) bp; + else { + tp = (uint32*) sp->tbuf; +- assert(sp->tbuflen >= npixels); ++ if(sp->tbuflen < npixels) { ++ TIFFErrorExt(tif->tif_clientdata, module, ++ "Translation buffer too short"); ++ return (0); ++ } + (*sp->tfunc)(sp, bp, npixels); + } + /* write out encoded pixels */ +@@ -553,6 +581,7 @@ LogLuvEncode24(TIFF* tif, uint8* bp, tms + static int + LogLuvEncode32(TIFF* tif, uint8* bp, tmsize_t cc, uint16 s) + { ++ static const char module[] = "LogLuvEncode32"; + LogLuvState* sp = EncoderState(tif); + int shft; + tmsize_t i; +@@ -574,7 +603,11 @@ LogLuvEncode32(TIFF* tif, uint8* bp, tms + tp = (uint32*) bp; + else { + tp = (uint32*) sp->tbuf; +- assert(sp->tbuflen >= npixels); ++ if(sp->tbuflen < npixels) { ++ TIFFErrorExt(tif->tif_clientdata, module, ++ "Translation buffer too short"); ++ return (0); ++ } + (*sp->tfunc)(sp, bp, npixels); + } + /* compress each byte string */
meta/recipes-multimedia/libtiff/tiff_4.0.6.bb +1 -0
@@ -6,6 +6,7 @@ HOMEPAGE = "http://www.remotesensing.org/libtiff/" SRC_URI = "ftp://ftp.remotesensing.org/pub/libtiff/tiff-${PV}.tar.gz \ file://libtool2.patch \ file://CVE-2015-8665_8683.patch \ + file://CVE-2015-8781.patch \ " SRC_URI[md5sum] = "d1d2e940dea0b5ad435f21f03d96dd72"
Signature · 1 line
2.7.4
PATCH 2/5 tiff: Security fix CVE-2015-8784
In reply to Yi ZhaoFrom: Armin Kuster <[email protected]>
CVE-2015-8784 libtiff: out-of-bound write in NeXTDecode()
External Reference:
https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2015-8784
--- .../libtiff/files/CVE-2015-8784.patch | 73 ++++++++++++++++++++++ meta/recipes-multimedia/libtiff/tiff_4.0.6.bb | 1 + 2 files changed, 74 insertions(+) create mode 100644 meta/recipes-multimedia/libtiff/files/CVE-2015-8784.patch
meta/recipes-multimedia/libtiff/files/CVE-2015-8784.patch new file +73 -0
@@ -0,0 +1,73 @@ +From b18012dae552f85dcc5c57d3bf4e997a15b1cc1c Mon Sep 17 00:00:00 2001 +From: erouault <erouault> +Date: Sun, 27 Dec 2015 16:55:20 +0000 +Subject: [PATCH] * libtiff/tif_next.c: fix potential out-of-bound write in + NeXTDecode() triggered by http://lcamtuf.coredump.cx/afl/vulns/libtiff5.tif + (bugzilla #2508) + +Upstream-Status: Backport +https://github.com/vadz/libtiff/commit/b18012dae552f85dcc5c57d3bf4e997a15b1cc1c +hand applied Changelog changes + +CVE: CVE-2015-8784 +Signed-off-by: Armin Kuster <[email protected]> + +--- + ChangeLog | 6 ++++++ + libtiff/tif_next.c | 10 ++++++++-- + 2 files changed, 14 insertions(+), 2 deletions(-) + +Index: tiff-4.0.4/ChangeLog +=================================================================== +--- tiff-4.0.4.orig/ChangeLog ++++ tiff-4.0.4/ChangeLog +@@ -1,5 +1,11 @@ + 2015-12-27 Even Rouault <even.rouault at spatialys.com> + ++ * libtiff/tif_next.c: fix potential out-of-bound write in NeXTDecode() ++ triggered by http://lcamtuf.coredump.cx/afl/vulns/libtiff5.tif ++ (bugzilla #2508) ++ ++2015-12-27 Even Rouault <even.rouault at spatialys.com> ++ + * libtiff/tif_luv.c: fix potential out-of-bound writes in decode + functions in non debug builds by replacing assert()s by regular if + checks (bugzilla #2522). +Index: tiff-4.0.4/libtiff/tif_next.c +=================================================================== +--- tiff-4.0.4.orig/libtiff/tif_next.c ++++ tiff-4.0.4/libtiff/tif_next.c +@@ -37,7 +37,7 @@ + case 0: op[0] = (unsigned char) ((v) << 6); break; \ + case 1: op[0] |= (v) << 4; break; \ + case 2: op[0] |= (v) << 2; break; \ +- case 3: *op++ |= (v); break; \ ++ case 3: *op++ |= (v); op_offset++; break; \ + } \ + } + +@@ -106,6 +106,7 @@ NeXTDecode(TIFF* tif, uint8* buf, tmsize + uint32 imagewidth = tif->tif_dir.td_imagewidth; + if( isTiled(tif) ) + imagewidth = tif->tif_dir.td_tilewidth; ++ tmsize_t op_offset = 0; + + /* + * The scanline is composed of a sequence of constant +@@ -122,10 +123,15 @@ NeXTDecode(TIFF* tif, uint8* buf, tmsize + * bounds, potentially resulting in a security + * issue. + */ +- while (n-- > 0 && npixels < imagewidth) ++ while (n-- > 0 && npixels < imagewidth && op_offset < scanline) + SETPIXEL(op, grey); + if (npixels >= imagewidth) + break; ++ if (op_offset >= scanline ) { ++ TIFFErrorExt(tif->tif_clientdata, module, "Invalid data for scanline %ld", ++ (long) tif->tif_row); ++ return (0); ++ } + if (cc == 0) + goto bad; + n = *bp++, cc--;
meta/recipes-multimedia/libtiff/tiff_4.0.6.bb +1 -0
@@ -7,6 +7,7 @@ SRC_URI = "ftp://ftp.remotesensing.org/pub/libtiff/tiff-${PV}.tar.gz \ file://libtool2.patch \ file://CVE-2015-8665_8683.patch \ file://CVE-2015-8781.patch \ + file://CVE-2015-8784.patch \ " SRC_URI[md5sum] = "d1d2e940dea0b5ad435f21f03d96dd72"
Signature · 1 line
2.7.4
PATCH 3/5 tiff: Security fix CVE-2016-3186
In reply to Yi ZhaoCVE-2016-3186 libtiff: buffer overflow in the readextension function in gif2tiff.c allows remote attackers to cause a denial of service via a crafted GIF file
External References:
https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-3186
https://bugzilla.redhat.com/show_bug.cgi?id=1319503
Patch from:
https://bugzilla.redhat.com/attachment.cgi?id=1144235&action=diff
--- .../libtiff/files/CVE-2016-3186.patch | 24 ++++++++++++++++++++++ meta/recipes-multimedia/libtiff/tiff_4.0.6.bb | 1 + 2 files changed, 25 insertions(+) create mode 100644 meta/recipes-multimedia/libtiff/files/CVE-2016-3186.patch
meta/recipes-multimedia/libtiff/files/CVE-2016-3186.patch new file +24 -0
@@ -0,0 +1,24 @@ +Buffer overflow in the readextension function in gif2tiff.c +allows remote attackers to cause a denial of service via a crafted GIF file. + +External References: +https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-3186 +https://bugzilla.redhat.com/show_bug.cgi?id=1319503 + +CVE: CVE-2016-3186 +Upstream-Status: Backport (RedHat) +https://bugzilla.redhat.com/attachment.cgi?id=1144235&action=diff + +Signed-off-by: Yi Zhao <[email protected]> + +--- tiff-4.0.6/tools/gif2tiff.c 2016-04-06 15:43:01.586048341 +0200 ++++ tiff-4.0.6/tools/gif2tiff.c 2016-04-06 15:48:05.523207710 +0200 +@@ -349,7 +349,7 @@ + int status = 1; + + (void) getc(infile); +- while ((count = getc(infile)) && count <= 255) ++ while ((count = getc(infile)) && count >= 0 && count <= 255) + if (fread(buf, 1, count, infile) != (size_t) count) { + fprintf(stderr, "short read from file %s (%s)\n", + filename, strerror(errno));
meta/recipes-multimedia/libtiff/tiff_4.0.6.bb +1 -0
@@ -8,6 +8,7 @@ SRC_URI = "ftp://ftp.remotesensing.org/pub/libtiff/tiff-${PV}.tar.gz \ file://CVE-2015-8665_8683.patch \ file://CVE-2015-8781.patch \ file://CVE-2015-8784.patch \ + file://CVE-2016-3186.patch \ " SRC_URI[md5sum] = "d1d2e940dea0b5ad435f21f03d96dd72"
Signature · 1 line
2.7.4
PATCH 4/5 tiff: Security fix CVE-2016-5321
In reply to Yi ZhaoCVE-2016-5321 libtiff: a maliciously crafted TIFF file could cause the application to crash when using tiffcrop command
External References:
http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-5321
http://bugzilla.maptools.org/show_bug.cgi?id=2558
Patch from:
https://github.com/vadz/libtiff/commit/d9783e4a1476b6787a51c5ae9e9b3156527589f0
--- .../libtiff/files/CVE-2016-5321.patch | 49 ++++++++++++++++++++++ meta/recipes-multimedia/libtiff/tiff_4.0.6.bb | 1 + 2 files changed, 50 insertions(+) create mode 100644 meta/recipes-multimedia/libtiff/files/CVE-2016-5321.patch
meta/recipes-multimedia/libtiff/files/CVE-2016-5321.patch new file +49 -0
@@ -0,0 +1,49 @@ +From d9783e4a1476b6787a51c5ae9e9b3156527589f0 Mon Sep 17 00:00:00 2001 +From: erouault <erouault> +Date: Mon, 11 Jul 2016 21:26:03 +0000 +Subject: [PATCH 1/2] * tools/tiffcrop.c: Avoid access outside of stack + allocated array on a tiled separate TIFF with more than 8 samples per pixel. + Reported by Kaixiang Zhang of the Cloud Security Team, Qihoo 360 + (CVE-2016-5321, bugzilla #2558) + +CVE: CVE-2016-5321 +Upstream-Status: Backport +https://github.com/vadz/libtiff/commit/d9783e4a1476b6787a51c5ae9e9b3156527589f0 + +Signed-off-by: Yi Zhao <[email protected]> +--- + ChangeLog | 7 +++++++ + tools/tiffcrop.c | 2 +- + 2 files changed, 8 insertions(+), 1 deletion(-) + +diff --git a/ChangeLog b/ChangeLog +index e98d54d..4e0302f 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -1,3 +1,10 @@ ++2016-07-11 Even Rouault <even.rouault at spatialys.com> ++ ++ * tools/tiffcrop.c: Avoid access outside of stack allocated array ++ on a tiled separate TIFF with more than 8 samples per pixel. ++ Reported by Kaixiang Zhang of the Cloud Security Team, Qihoo 360 ++ (CVE-2016-5321, bugzilla #2558) ++ + 2015-12-27 Even Rouault <even.rouault at spatialys.com> + + * libtiff/tif_next.c: fix potential out-of-bound write in NeXTDecode() +diff --git a/tools/tiffcrop.c b/tools/tiffcrop.c +index d959ae3..6fc8fc1 100644 +--- a/tools/tiffcrop.c ++++ b/tools/tiffcrop.c +@@ -989,7 +989,7 @@ static int readSeparateTilesIntoBuffer (TIFF* in, uint8 *obuf, + nrow = (row + tl > imagelength) ? imagelength - row : tl; + for (col = 0; col < imagewidth; col += tw) + { +- for (s = 0; s < spp; s++) ++ for (s = 0; s < spp && s < MAX_SAMPLES; s++) + { /* Read each plane of a tile set into srcbuffs[s] */ + tbytes = TIFFReadTile(in, srcbuffs[s], col, row, 0, s); + if (tbytes < 0 && !ignore) +-- +2.7.4 +
meta/recipes-multimedia/libtiff/tiff_4.0.6.bb +1 -0
@@ -9,6 +9,7 @@ SRC_URI = "ftp://ftp.remotesensing.org/pub/libtiff/tiff-${PV}.tar.gz \ file://CVE-2015-8781.patch \ file://CVE-2015-8784.patch \ file://CVE-2016-3186.patch \ + file://CVE-2016-5321.patch \ " SRC_URI[md5sum] = "d1d2e940dea0b5ad435f21f03d96dd72"
Signature · 1 line
2.7.4
PATCH 5/5 tiff: Security fix CVE-2016-5323
In reply to Yi ZhaoCVE-2016-5323 libtiff: a maliciously crafted TIFF file could cause the application to crash when using tiffcrop command
External References:
http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-5323
http://bugzilla.maptools.org/show_bug.cgi?id=2559
Patch from:
https://github.com/vadz/libtiff/commit/2f79856097f423eb33796a15fcf700d2ea41bf31
--- .../libtiff/files/CVE-2016-5323.patch | 107 +++++++++++++++++++++ meta/recipes-multimedia/libtiff/tiff_4.0.6.bb | 1 + 2 files changed, 108 insertions(+) create mode 100644 meta/recipes-multimedia/libtiff/files/CVE-2016-5323.patch
meta/recipes-multimedia/libtiff/files/CVE-2016-5323.patch new file +107 -0
@@ -0,0 +1,107 @@ +From 2f79856097f423eb33796a15fcf700d2ea41bf31 Mon Sep 17 00:00:00 2001 +From: erouault <erouault> +Date: Mon, 11 Jul 2016 21:38:31 +0000 +Subject: [PATCH 2/2] (CVE-2016-5321 / CVE-2016-5323 , bugzilla #2558 / #2559) + +CVE: CVE-2016-5323 +Upstream-Status: Backport +https://github.com/vadz/libtiff/commit/2f79856097f423eb33796a15fcf700d2ea41bf31 + +Signed-off-by: Yi Zhao <[email protected]> +--- + ChangeLog | 2 +- + tools/tiffcrop.c | 16 ++++++++-------- + 2 files changed, 9 insertions(+), 9 deletions(-) + +diff --git a/ChangeLog b/ChangeLog +index 4e0302f..62dc1b5 100644 +--- a/ChangeLog ++++ b/ChangeLog +@@ -3,7 +3,7 @@ + * tools/tiffcrop.c: Avoid access outside of stack allocated array + on a tiled separate TIFF with more than 8 samples per pixel. + Reported by Kaixiang Zhang of the Cloud Security Team, Qihoo 360 +- (CVE-2016-5321, bugzilla #2558) ++ (CVE-2016-5321 / CVE-2016-5323 , bugzilla #2558 / #2559) + + 2016-07-10 Even Rouault <even.rouault at spatialys.com> + +diff --git a/tools/tiffcrop.c b/tools/tiffcrop.c +index 6fc8fc1..27abc0b 100644 +--- a/tools/tiffcrop.c ++++ b/tools/tiffcrop.c +@@ -3738,7 +3738,7 @@ combineSeparateSamples8bits (uint8 *in[], uint8 *out, uint32 cols, + + matchbits = maskbits << (8 - src_bit - bps); + /* load up next sample from each plane */ +- for (s = 0; s < spp; s++) ++ for (s = 0; (s < spp) && (s < MAX_SAMPLES); s++) + { + src = in[s] + src_offset + src_byte; + buff1 = ((*src) & matchbits) << (src_bit); +@@ -3837,7 +3837,7 @@ combineSeparateSamples16bits (uint8 *in[], uint8 *out, uint32 cols, + src_bit = bit_offset % 8; + + matchbits = maskbits << (16 - src_bit - bps); +- for (s = 0; s < spp; s++) ++ for (s = 0; (s < spp) && (s < MAX_SAMPLES); s++) + { + src = in[s] + src_offset + src_byte; + if (little_endian) +@@ -3947,7 +3947,7 @@ combineSeparateSamples24bits (uint8 *in[], uint8 *out, uint32 cols, + src_bit = bit_offset % 8; + + matchbits = maskbits << (32 - src_bit - bps); +- for (s = 0; s < spp; s++) ++ for (s = 0; (s < spp) && (s < MAX_SAMPLES); s++) + { + src = in[s] + src_offset + src_byte; + if (little_endian) +@@ -4073,7 +4073,7 @@ combineSeparateSamples32bits (uint8 *in[], uint8 *out, uint32 cols, + src_bit = bit_offset % 8; + + matchbits = maskbits << (64 - src_bit - bps); +- for (s = 0; s < spp; s++) ++ for (s = 0; (s < spp) && (s < MAX_SAMPLES); s++) + { + src = in[s] + src_offset + src_byte; + if (little_endian) +@@ -4263,7 +4263,7 @@ combineSeparateTileSamples8bits (uint8 *in[], uint8 *out, uint32 cols, + + matchbits = maskbits << (8 - src_bit - bps); + /* load up next sample from each plane */ +- for (s = 0; s < spp; s++) ++ for (s = 0; (s < spp) && (s < MAX_SAMPLES); s++) + { + src = in[s] + src_offset + src_byte; + buff1 = ((*src) & matchbits) << (src_bit); +@@ -4362,7 +4362,7 @@ combineSeparateTileSamples16bits (uint8 *in[], uint8 *out, uint32 cols, + src_bit = bit_offset % 8; + + matchbits = maskbits << (16 - src_bit - bps); +- for (s = 0; s < spp; s++) ++ for (s = 0; (s < spp) && (s < MAX_SAMPLES); s++) + { + src = in[s] + src_offset + src_byte; + if (little_endian) +@@ -4471,7 +4471,7 @@ combineSeparateTileSamples24bits (uint8 *in[], uint8 *out, uint32 cols, + src_bit = bit_offset % 8; + + matchbits = maskbits << (32 - src_bit - bps); +- for (s = 0; s < spp; s++) ++ for (s = 0; (s < spp) && (s < MAX_SAMPLES); s++) + { + src = in[s] + src_offset + src_byte; + if (little_endian) +@@ -4597,7 +4597,7 @@ combineSeparateTileSamples32bits (uint8 *in[], uint8 *out, uint32 cols, + src_bit = bit_offset % 8; + + matchbits = maskbits << (64 - src_bit - bps); +- for (s = 0; s < spp; s++) ++ for (s = 0; (s < spp) && (s < MAX_SAMPLES); s++) + { + src = in[s] + src_offset + src_byte; + if (little_endian) +-- +2.7.4 +
meta/recipes-multimedia/libtiff/tiff_4.0.6.bb +1 -0
@@ -10,6 +10,7 @@ SRC_URI = "ftp://ftp.remotesensing.org/pub/libtiff/tiff-${PV}.tar.gz \ file://CVE-2015-8784.patch \ file://CVE-2016-3186.patch \ file://CVE-2016-5321.patch \ + file://CVE-2016-5323.patch \ " SRC_URI[md5sum] = "d1d2e940dea0b5ad435f21f03d96dd72"
Signature · 1 line
2.7.4