Hi Jussi,

在 2016年10月26日 17:09, Jussi Kukkonen 写道:
On 26 October 2016 at 11:26, Yi Zhao <[email protected] <mailto:[email protected]>> wrote:

    CVE-2016-3945 libtiff: Multiple integer overflows in the (1)
    cvt_by_strip and (2) cvt_by_tile functions in the tiff2rgba tool in
    LibTIFF 4.0.6 and earlier, when -b mode is enabled, allow remote
    attackers to cause a denial of service (crash) or execute
    arbitrary code
    via a crafted TIFF image, which triggers an out-of-bounds write.

    External References:
    https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-3945
    <https://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2016-3945>
    http://bugzilla.maptools.org/show_bug.cgi?id=2545
    <http://bugzilla.maptools.org/show_bug.cgi?id=2545>

    Patch from:
    
https://github.com/vadz/libtiff/commit/7c39352ccd9060d311d3dc9a1f1bc00133a160e6
    
<https://github.com/vadz/libtiff/commit/7c39352ccd9060d311d3dc9a1f1bc00133a160e6>

    Signed-off-by: Yi Zhao <[email protected]
    <mailto:[email protected]>>
    ---
     .../libtiff/files/CVE-2016-3945.patch              | 118
    +++++++++++++++++++++
     meta/recipes-multimedia/libtiff/tiff_4.0.6.bb
    <http://tiff_4.0.6.bb> |   1 +
     2 files changed, 119 insertions(+)
     create mode 100644
    meta/recipes-multimedia/libtiff/files/CVE-2016-3945.patch

    diff --git
    a/meta/recipes-multimedia/libtiff/files/CVE-2016-3945.patch
    b/meta/recipes-multimedia/libtiff/files/CVE-2016-3945.patch
    new file mode 100644
    index 0000000..4d965be
    --- /dev/null
    +++ b/meta/recipes-multimedia/libtiff/files/CVE-2016-3945.patch
    @@ -0,0 +1,118 @@
    +From 7c39352ccd9060d311d3dc9a1f1bc00133a160e6 Mon Sep 17 00:00:00
    2001
    +From: erouault <erouault>
    +Date: Mon, 15 Aug 2016 20:06:40 +0000
    +Subject: [PATCH] * tools/tiff2rgba.c: Fix integer overflow in size of
    + allocated buffer, when -b mode is enabled, that could result in
    out-of-bounds
    + write. Based initially on patch tiff-CVE-2016-3945.patch from
    + libtiff-4.0.3-25.el7_2.src.rpm by Nikola Forro, with correction
    for invalid
    + tests that rejected valid files.
    +
    +CVE: CVE-2016-3945
    +Upstream-Status: Backport
    
+https://github.com/vadz/libtiff/commit/7c39352ccd9060d311d3dc9a1f1bc00133a160e6
    
<https://github.com/vadz/libtiff/commit/7c39352ccd9060d311d3dc9a1f1bc00133a160e6>


It would be appropriate to point out that this is not the real upstream, just a nameless github user who maintains a git mirror of the libtiff repository. It's probably a reasonable choice -- the current libtiff situation with no real homepage, no real tarball hosting and a half-hidden cvs server for source control is pretty sad -- but should still be openly mentioned.

Thank you for your suggestion. This github is a mirror for libtiff cvs repository in cvs.maptools.org. If the cvs repository is official, take the patches from it is better.

Yi


Jussi

    +
    +Signed-off-by: Yi Zhao <[email protected]
    <mailto:[email protected]>>
    +---
    + ChangeLog         |  8 ++++++++
    + tools/tiff2rgba.c | 34 ++++++++++++++++++++++++++++++----
    + 2 files changed, 38 insertions(+), 4 deletions(-)
    +
    +diff --git a/ChangeLog b/ChangeLog
    +index 62dc1b5..9c0ab29 100644
    +--- a/ChangeLog
    ++++ b/ChangeLog
    +@@ -1,3 +1,11 @@
    ++2016-08-15 Even Rouault <even.rouault at spatialys.com
    <http://spatialys.com>>
    ++
    ++      * tools/tiff2rgba.c: Fix integer overflow in size of allocated
    ++      buffer, when -b mode is enabled, that could result in
    out-of-bounds
    ++      write. Based initially on patch tiff-CVE-2016-3945.patch from
    ++      libtiff-4.0.3-25.el7_2.src.rpm by Nikola Forro, with
    correction for
    ++      invalid tests that rejected valid files.
    ++
    + 2016-07-11 Even Rouault <even.rouault at spatialys.com
    <http://spatialys.com>>
    +
    +       * tools/tiffcrop.c: Avoid access outside of stack
    allocated array
    +diff --git a/tools/tiff2rgba.c b/tools/tiff2rgba.c
    +index b7a81eb..16e3dc4 100644
    +--- a/tools/tiff2rgba.c
    ++++ b/tools/tiff2rgba.c
    +@@ -147,6 +147,7 @@ cvt_by_tile( TIFF *in, TIFF *out )
    +     uint32  row, col;
    +     uint32  *wrk_line;
    +     int           ok = 1;
    ++    uint32  rastersize, wrk_linesize;
    +
    +     TIFFGetField(in, TIFFTAG_IMAGEWIDTH, &width);
    +     TIFFGetField(in, TIFFTAG_IMAGELENGTH, &height);
    +@@ -163,7 +164,13 @@ cvt_by_tile( TIFF *in, TIFF *out )
    +     /*
    +      * Allocate tile buffer
    +      */
    +-    raster = (uint32*)_TIFFmalloc(tile_width * tile_height *
    sizeof (uint32));
    ++    rastersize = tile_width * tile_height * sizeof (uint32);
    ++    if (tile_width != (rastersize / tile_height) / sizeof( uint32))
    ++    {
    ++      TIFFError(TIFFFileName(in), "Integer overflow when
    calculating raster buffer");
    ++      exit(-1);
    ++    }
    ++    raster = (uint32*)_TIFFmalloc(rastersize);
    +     if (raster == 0) {
    +         TIFFError(TIFFFileName(in), "No space for raster buffer");
    +         return (0);
    +@@ -173,7 +180,13 @@ cvt_by_tile( TIFF *in, TIFF *out )
    +      * Allocate a scanline buffer for swapping during the vertical
    +      * mirroring pass.
    +      */
    +-    wrk_line = (uint32*)_TIFFmalloc(tile_width * sizeof (uint32));
    ++    wrk_linesize = tile_width * sizeof (uint32);
    ++    if (tile_width != wrk_linesize / sizeof (uint32))
    ++    {
    ++        TIFFError(TIFFFileName(in), "Integer overflow when
    calculating wrk_line buffer");
    ++      exit(-1);
    ++    }
    ++    wrk_line = (uint32*)_TIFFmalloc(wrk_linesize);
    +     if (!wrk_line) {
    +         TIFFError(TIFFFileName(in), "No space for raster
    scanline buffer");
    +         ok = 0;
    +@@ -249,6 +262,7 @@ cvt_by_strip( TIFF *in, TIFF *out )
    +     uint32  row;
    +     uint32  *wrk_line;
    +     int           ok = 1;
    ++    uint32  rastersize, wrk_linesize;
    +
    +     TIFFGetField(in, TIFFTAG_IMAGEWIDTH, &width);
    +     TIFFGetField(in, TIFFTAG_IMAGELENGTH, &height);
    +@@ -263,7 +277,13 @@ cvt_by_strip( TIFF *in, TIFF *out )
    +     /*
    +      * Allocate strip buffer
    +      */
    +-    raster = (uint32*)_TIFFmalloc(width * rowsperstrip * sizeof
    (uint32));
    ++    rastersize = width * rowsperstrip * sizeof (uint32);
    ++    if (width != (rastersize / rowsperstrip) / sizeof( uint32))
    ++    {
    ++      TIFFError(TIFFFileName(in), "Integer overflow when
    calculating raster buffer");
    ++      exit(-1);
    ++    }
    ++    raster = (uint32*)_TIFFmalloc(rastersize);
    +     if (raster == 0) {
    +         TIFFError(TIFFFileName(in), "No space for raster buffer");
    +         return (0);
    +@@ -273,7 +293,13 @@ cvt_by_strip( TIFF *in, TIFF *out )
    +      * Allocate a scanline buffer for swapping during the vertical
    +      * mirroring pass.
    +      */
    +-    wrk_line = (uint32*)_TIFFmalloc(width * sizeof (uint32));
    ++    wrk_linesize = width * sizeof (uint32);
    ++    if (width != wrk_linesize / sizeof (uint32))
    ++    {
    ++        TIFFError(TIFFFileName(in), "Integer overflow when
    calculating wrk_line buffer");
    ++      exit(-1);
    ++    }
    ++    wrk_line = (uint32*)_TIFFmalloc(wrk_linesize);
    +     if (!wrk_line) {
    +         TIFFError(TIFFFileName(in), "No space for raster
    scanline buffer");
    +         ok = 0;
    +--
    +2.7.4
    +
    diff --git a/meta/recipes-multimedia/libtiff/tiff_4.0.6.bb
    <http://tiff_4.0.6.bb>
    b/meta/recipes-multimedia/libtiff/tiff_4.0.6.bb <http://tiff_4.0.6.bb>
    index 8147bc4..b978528 100644
    --- a/meta/recipes-multimedia/libtiff/tiff_4.0.6.bb
    <http://tiff_4.0.6.bb>
    +++ b/meta/recipes-multimedia/libtiff/tiff_4.0.6.bb
    <http://tiff_4.0.6.bb>
    @@ -10,6 +10,7 @@ SRC_URI =
    "http://download.osgeo.org/libtiff/tiff-${PV}.tar.gz
    <http://download.osgeo.org/libtiff/tiff-$%7BPV%7D.tar.gz> \
                file://CVE-2016-3186.patch \
                file://CVE-2016-5321.patch \
                file://CVE-2016-5323.patch \
    +           file://CVE-2016-3945.patch \
               "

     SRC_URI[md5sum] = "d1d2e940dea0b5ad435f21f03d96dd72"
    --
    2.7.4

    --
    _______________________________________________
    Openembedded-core mailing list
    [email protected]
    <mailto:[email protected]>
    http://lists.openembedded.org/mailman/listinfo/openembedded-core
    <http://lists.openembedded.org/mailman/listinfo/openembedded-core>



-- 
_______________________________________________
Openembedded-core mailing list
[email protected]
http://lists.openembedded.org/mailman/listinfo/openembedded-core

Reply via email to