Your message dated Sat, 26 Mar 2022 12:02:22 +0000
with message-id 
<540de30a27d37c3ff416b94b1adf7ff2a2cab257.ca...@adam-barratt.org.uk>
and subject line Closing requests for updates in 10.12
has caused the Debian Bug report #1003841,
regarding buster-pu: package cimg/2.4.5+dfsg-1+deb10u1
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact ow...@bugs.debian.org
immediately.)


-- 
1003841: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1003841
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- Begin Message ---
Package: release.debian.org
Severity: normal
Tags: buster
User: release.debian....@packages.debian.org
Usertags: pu

  * CVE-2020-25693: Fix multiple heap buffer overflows.
    (Closes: #973770)

This is a headers-only library, the only user in buster needs
to be rebuilt:
  nmu beads_1.1.18+dfsg-3 . ANY . buster . 'Rebuild with cimg-dev 
2.4.5+dfsg-1+deb10u1'
  dw beads_1.1.18+dfsg-3 . ANY . buster . -m 'cimg-dev (>= 
2.4.5+dfsg-1+deb10u1)'
diff -Nru cimg-2.4.5+dfsg/debian/changelog cimg-2.4.5+dfsg/debian/changelog
--- cimg-2.4.5+dfsg/debian/changelog    2019-01-30 12:43:23.000000000 +0200
+++ cimg-2.4.5+dfsg/debian/changelog    2022-01-16 16:24:14.000000000 +0200
@@ -1,3 +1,11 @@
+cimg (2.4.5+dfsg-1+deb10u1) buster; urgency=medium
+
+  * Non-maintainer upload.
+  * CVE-2020-25693: Fix multiple heap buffer overflows.
+    (Closes: #973770)
+
+ -- Adrian Bunk <b...@debian.org>  Sun, 16 Jan 2022 16:24:14 +0200
+
 cimg (2.4.5+dfsg-1) unstable; urgency=medium
 
   [ Jelmer Vernooij ]
diff -Nru 
cimg-2.4.5+dfsg/debian/patches/0001-Fix-multiple-heap-buffer-overflows.patch 
cimg-2.4.5+dfsg/debian/patches/0001-Fix-multiple-heap-buffer-overflows.patch
--- 
cimg-2.4.5+dfsg/debian/patches/0001-Fix-multiple-heap-buffer-overflows.patch    
    1970-01-01 02:00:00.000000000 +0200
+++ 
cimg-2.4.5+dfsg/debian/patches/0001-Fix-multiple-heap-buffer-overflows.patch    
    2022-01-16 16:24:14.000000000 +0200
@@ -0,0 +1,184 @@
+From d21c5afc86536154bacab02decc38ead2c77189f Mon Sep 17 00:00:00 2001
+From: Kai Dietrich <kai.dietr...@meelogic.com>
+Date: Thu, 22 Oct 2020 08:16:07 +0200
+Subject: Fix multiple heap buffer overflows
+
+The size calculation pattern (size_t)size_x*size_y*size_z*size_c can
+overflow the resulting size_t. Especially on 32bit size_t platforms this
+is trivial and can be achieved using a simple PNM image, e.g. the
+following ASCII PNM would allocate only 6 byte and result in a trivial
+arbitrary heap write:
+P3
+2147483649 2
+255
+255
+255
+255
+255
+255
+255
+255
+255
+255
+255
+255
+255
+255
+255
+...
+---
+ CImg.h | 47 ++++++++++++++++++++++++++++++++++-------------
+ 1 file changed, 34 insertions(+), 13 deletions(-)
+
+diff --git a/CImg.h b/CImg.h
+index 20f1fc6..62be2ce 100644
+--- a/CImg.h
++++ b/CImg.h
+@@ -11459,6 +11459,27 @@ namespace cimg_library_suffixed {
+     **/
+     
CImg():_width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) {}
+ 
++    size_t _safe_size(const unsigned int size_x, const unsigned int size_y,
++                      const unsigned int size_z, const unsigned int size_c) 
const
++    {
++        const unsigned int dim[4] = {size_x, size_y, size_z, size_c};
++        size_t size = 1;
++        int overflows = 0;
++        for (int d = 0; d < sizeof(dim)/sizeof(dim[0]); d++) {
++            if (dim[d]>1 && size*dim[d] <= size) { overflows++; }
++            size *= dim[d];
++        }
++        if (sizeof(T)>1 && size*sizeof(T) <= size) { overflows++; }
++        if (overflows != 0) {
++            throw CImgArgumentException(_cimg_instance
++                "_safe_size(): Invalid size - size_t overflow"
++                "(%u,%u,%u,%u).",
++                cimg_instance,
++                size_x, size_y, size_z, size_c);
++        }
++        return size;
++    }
++
+     //! Construct image with specified size.
+     /**
+        \param size_x Image width().
+@@ -11485,7 +11506,7 @@ namespace cimg_library_suffixed {
+     explicit CImg(const unsigned int size_x, const unsigned int size_y=1,
+                   const unsigned int size_z=1, const unsigned int size_c=1):
+       _is_shared(false) {
+-      size_t siz = (size_t)size_x*size_y*size_z*size_c;
++      size_t siz = _safe_size(size_x,size_y,size_z,size_c);
+       if (siz) {
+         _width = size_x; _height = size_y; _depth = size_z; _spectrum = 
size_c;
+         try { _data = new T[siz]; } catch (...) {
+@@ -11517,7 +11538,7 @@ namespace cimg_library_suffixed {
+     CImg(const unsigned int size_x, const unsigned int size_y,
+          const unsigned int size_z, const unsigned int size_c, const T& 
value):
+       _is_shared(false) {
+-      const size_t siz = (size_t)size_x*size_y*size_z*size_c;
++      const size_t siz = _safe_size(size_x,size_y,size_z,size_c);
+       if (siz) {
+         _width = size_x; _height = size_y; _depth = size_z; _spectrum = 
size_c;
+         try { _data = new T[siz]; } catch (...) {
+@@ -11578,7 +11599,7 @@ namespace cimg_library_suffixed {
+       } \
+       }
+       assign(size_x,size_y,size_z,size_c);
+-      
_CImg_stdarg(*this,value0,value1,(size_t)size_x*size_y*size_z*size_c,int);
++      
_CImg_stdarg(*this,value0,value1,_safe_size(size_x,size_y,size_z,size_c),int);
+     }
+ 
+ #if cimg_use_cpp11==1
+@@ -11707,7 +11728,7 @@ namespace cimg_library_suffixed {
+          const double value0, const double value1, ...):
+       _width(0),_height(0),_depth(0),_spectrum(0),_is_shared(false),_data(0) {
+       assign(size_x,size_y,size_z,size_c);
+-      
_CImg_stdarg(*this,value0,value1,(size_t)size_x*size_y*size_z*size_c,double);
++      
_CImg_stdarg(*this,value0,value1,_safe_size(size_x,size_y,size_z,size_c),double);
+     }
+ 
+     //! Construct image with specified size and initialize pixel values from 
a value string.
+@@ -11742,7 +11763,7 @@ namespace cimg_library_suffixed {
+      **/
+     CImg(const unsigned int size_x, const unsigned int size_y, const unsigned 
int size_z, const unsigned int size_c,
+        const char *const values, const bool repeat_values):_is_shared(false) {
+-      const size_t siz = (size_t)size_x*size_y*size_z*size_c;
++      const size_t siz = _safe_size(size_x,size_y,size_z,size_c);
+       if (siz) {
+         _width = size_x; _height = size_y; _depth = size_z; _spectrum = 
size_c;
+         try { _data = new T[siz]; } catch (...) {
+@@ -11798,7 +11819,7 @@ namespace cimg_library_suffixed {
+                                     cimg_instance,
+                                     
size_x,size_y,size_z,size_c,CImg<t>::pixel_type());
+       }
+-      const size_t siz = (size_t)size_x*size_y*size_z*size_c;
++      const size_t siz = _safe_size(size_x,size_y,size_z,size_c);
+       if (values && siz) {
+         _width = size_x; _height = size_y; _depth = size_z; _spectrum = 
size_c;
+         try { _data = new T[siz]; } catch (...) {
+@@ -11817,7 +11838,7 @@ namespace cimg_library_suffixed {
+     //! Construct image with specified size and initialize pixel values from 
a memory buffer \specialization.
+     CImg(const T *const values, const unsigned int size_x, const unsigned int 
size_y=1,
+          const unsigned int size_z=1, const unsigned int size_c=1, const bool 
is_shared=false) {
+-      const size_t siz = (size_t)size_x*size_y*size_z*size_c;
++      const size_t siz = _safe_size(size_x,size_y,size_z,size_c);
+       if (values && siz) {
+         _width = size_x; _height = size_y; _depth = size_z; _spectrum = 
size_c; _is_shared = is_shared;
+         if (_is_shared) _data = const_cast<T*>(values);
+@@ -12063,7 +12084,7 @@ namespace cimg_library_suffixed {
+     **/
+     CImg<T>& assign(const unsigned int size_x, const unsigned int size_y=1,
+                     const unsigned int size_z=1, const unsigned int size_c=1) 
{
+-      const size_t siz = (size_t)size_x*size_y*size_z*size_c;
++      const size_t siz = _safe_size(size_x,size_y,size_z,size_c);
+       if (!siz) return assign();
+       const size_t curr_siz = (size_t)size();
+       if (siz!=curr_siz) {
+@@ -12106,7 +12127,7 @@ namespace cimg_library_suffixed {
+                     const unsigned int size_z, const unsigned int size_c,
+                     const int value0, const int value1, ...) {
+       assign(size_x,size_y,size_z,size_c);
+-      
_CImg_stdarg(*this,value0,value1,(size_t)size_x*size_y*size_z*size_c,int);
++      
_CImg_stdarg(*this,value0,value1,_safe_size(size_x,size_y,size_z,size_c),int);
+       return *this;
+     }
+ 
+@@ -12118,7 +12139,7 @@ namespace cimg_library_suffixed {
+                     const unsigned int size_z, const unsigned int size_c,
+                     const double value0, const double value1, ...) {
+       assign(size_x,size_y,size_z,size_c);
+-      
_CImg_stdarg(*this,value0,value1,(size_t)size_x*size_y*size_z*size_c,double);
++      
_CImg_stdarg(*this,value0,value1,_safe_size(size_x,size_y,size_z,size_c),double);
+       return *this;
+     }
+ 
+@@ -12139,7 +12160,7 @@ namespace cimg_library_suffixed {
+     template<typename t>
+     CImg<T>& assign(const t *const values, const unsigned int size_x, const 
unsigned int size_y=1,
+                     const unsigned int size_z=1, const unsigned int size_c=1) 
{
+-      const size_t siz = (size_t)size_x*size_y*size_z*size_c;
++      const size_t siz = _safe_size(size_x,size_y,size_z,size_c);
+       if (!values || !siz) return assign();
+       assign(size_x,size_y,size_z,size_c);
+       const t *ptrs = values; cimg_for(*this,ptrd,T) *ptrd = (T)*(ptrs++);
+@@ -12149,7 +12170,7 @@ namespace cimg_library_suffixed {
+     //! Construct image with specified size and initialize pixel values from 
a memory buffer \specialization.
+     CImg<T>& assign(const T *const values, const unsigned int size_x, const 
unsigned int size_y=1,
+                     const unsigned int size_z=1, const unsigned int size_c=1) 
{
+-      const size_t siz = (size_t)size_x*size_y*size_z*size_c;
++      const size_t siz = _safe_size(size_x,size_y,size_z,size_c);
+       if (!values || !siz) return assign();
+       const size_t curr_siz = (size_t)size();
+       if (values==_data && siz==curr_siz) return 
assign(size_x,size_y,size_z,size_c);
+@@ -12189,7 +12210,7 @@ namespace cimg_library_suffixed {
+     //! Construct image with specified size and initialize pixel values from 
a memory buffer \overloading.
+     CImg<T>& assign(const T *const values, const unsigned int size_x, const 
unsigned int size_y,
+                     const unsigned int size_z, const unsigned int size_c, 
const bool is_shared) {
+-      const size_t siz = (size_t)size_x*size_y*size_z*size_c;
++      const size_t siz = _safe_size(size_x,size_y,size_z,size_c);
+       if (!values || !siz) return assign();
+       if (!is_shared) { if (_is_shared) assign(); 
assign(values,size_x,size_y,size_z,size_c); }
+       else {
+-- 
+2.20.1
+
diff -Nru cimg-2.4.5+dfsg/debian/patches/series 
cimg-2.4.5+dfsg/debian/patches/series
--- cimg-2.4.5+dfsg/debian/patches/series       2019-01-30 12:43:23.000000000 
+0200
+++ cimg-2.4.5+dfsg/debian/patches/series       2022-01-16 16:24:14.000000000 
+0200
@@ -1,2 +1,3 @@
 30_do_not_build_minc2_examples.patch
 # fix_privacy_breach.patch
+0001-Fix-multiple-heap-buffer-overflows.patch

--- End Message ---
--- Begin Message ---
Package: release.debian.org
Version: 10.12

Hi,

The updates referenced in these requests were included in oldstable as
part of today's 10.12 point release.

Regards,

Adam

--- End Message ---

Reply via email to