diff --git a/SOURCES/exiv2-CVE-2021-3482.patch b/SOURCES/exiv2-CVE-2021-3482.patch new file mode 100644 index 0000000..21edeee --- /dev/null +++ b/SOURCES/exiv2-CVE-2021-3482.patch @@ -0,0 +1,55 @@ +From 22ea582c6b74ada30bec3a6b15de3c3e52f2b4da Mon Sep 17 00:00:00 2001 +From: Robin Mills +Date: Mon, 5 Apr 2021 20:33:25 +0100 +Subject: [PATCH] fix_1522_jp2image_exif_asan + +--- + src/jp2image.cpp | 9 ++++++--- + 1 file changed, 6 insertions(+), 3 deletions(-) + +diff --git a/src/jp2image.cpp b/src/jp2image.cpp +index eb31cea4a..88ab9b2d6 100644 +--- a/src/jp2image.cpp ++++ b/src/jp2image.cpp +@@ -28,6 +28,7 @@ + #include "image.hpp" + #include "image_int.hpp" + #include "basicio.hpp" ++#include "enforce.hpp" + #include "error.hpp" + #include "futils.hpp" + #include "types.hpp" +@@ -353,7 +354,7 @@ static void boxes_check(size_t b,size_t m) + if (io_->error()) throw Error(kerFailedToReadImageData); + if (bufRead != rawData.size_) throw Error(kerInputDataReadFailed); + +- if (rawData.size_ > 0) ++ if (rawData.size_ > 8) // "II*\0long" + { + // Find the position of Exif header in bytes array. + long pos = ( (rawData.pData_[0] == rawData.pData_[1]) +@@ -497,6 +498,7 @@ static void boxes_check(size_t b,size_t m) + position = io_->tell(); + box.length = getLong((byte*)&box.length, bigEndian); + box.type = getLong((byte*)&box.type, bigEndian); ++ enforce(box.length <= io_->size()-io_->tell() , Exiv2::kerCorruptedMetadata); + + if (bPrint) { + out << Internal::stringFormat("%8ld | %8ld | ", (size_t)(position - sizeof(box)), +@@ -581,12 +583,13 @@ static void boxes_check(size_t b,size_t m) + throw Error(kerInputDataReadFailed); + + if (bPrint) { +- out << Internal::binaryToString(makeSlice(rawData, 0, 40)); ++ out << Internal::binaryToString( ++ makeSlice(rawData, 0, rawData.size_>40?40:rawData.size_)); + out.flush(); + } + lf(out, bLF); + +- if (bIsExif && bRecursive && rawData.size_ > 0) { ++ if (bIsExif && bRecursive && rawData.size_ > 8) { // "II*\0long" + if ((rawData.pData_[0] == rawData.pData_[1]) && + (rawData.pData_[0] == 'I' || rawData.pData_[0] == 'M')) { + BasicIo::AutoPtr p = BasicIo::AutoPtr(new MemIo(rawData.pData_, rawData.size_)); + diff --git a/SPECS/exiv2.spec b/SPECS/exiv2.spec index 149f029..dbf6565 100644 --- a/SPECS/exiv2.spec +++ b/SPECS/exiv2.spec @@ -2,7 +2,7 @@ Summary: Exif and Iptc metadata manipulation library Name: exiv2 Version: 0.27.3 -Release: 2%{?dist} +Release: 3%{?dist} License: GPLv2+ URL: http://www.exiv2.org/ @@ -10,6 +10,9 @@ Source0: https://github.com/Exiv2/%{name}/archive/exiv2-%{version}.tar.gz ## upstream patches (lookaside cache) +# Security fixes +Patch50: exiv2-CVE-2021-3482.patch + ## upstreamable patches # don't unconditionally use -fcf-protection flag, not supported on all archs # fedora already includes this on archs that do support it @@ -123,6 +126,10 @@ test -x %{buildroot}%{_libdir}/libexiv2.so %changelog +* Wed Apr 14 2021 Jan Grulich - 0.27.3-3 +- CVE-2021-3482: Fix heap-based buffer overflow in Jp2Image::readMetadata() + Resolves: bz#1947160 + * Wed Oct 7 2020 Jan Grulich - 0.27.3-2 - Avoid duplicating Changelog file Resolves: bz#1880984