~ruther/guix-local

4e58a402ff9f28686501ab390be93a6866d382f6 — Leo Famulari 10 years ago 6399941
gnu: cpio: Add fix for CVE-2016-2037.

* gnu/packages/patches/cpio-CVE-2016-2037.patch: New file.
* gnu-system.am (dist_patch_DATA): Add it.
* gnu/packages/cpio.scm (cpio)[source]: Add patch.
3 files changed, 52 insertions(+), 1 deletions(-)

M gnu-system.am
M gnu/packages/cpio.scm
A gnu/packages/patches/cpio-CVE-2016-2037.patch
M gnu-system.am => gnu-system.am +1 -0
@@ 437,6 437,7 @@ dist_patch_DATA =						\
  gnu/packages/patches/clucene-pkgconfig.patch			\
  gnu/packages/patches/cmake-fix-tests.patch			\
  gnu/packages/patches/cpio-gets-undeclared.patch		\
  gnu/packages/patches/cpio-CVE-2016-2037.patch			\
  gnu/packages/patches/cpufrequtils-fix-aclocal.patch		\
  gnu/packages/patches/crda-optional-gcrypt.patch		\
  gnu/packages/patches/crossmap-allow-system-pysam.patch	\

M gnu/packages/cpio.scm => gnu/packages/cpio.scm +2 -1
@@ 35,7 35,8 @@
                                 version ".tar.bz2"))
             (sha256
              (base32
               "0vi9q475h1rki53100zml75vxsykzyhrn70hidy41s5c2rc8r6bh"))))
               "0vi9q475h1rki53100zml75vxsykzyhrn70hidy41s5c2rc8r6bh"))
             (patches (list (search-patch "cpio-CVE-2016-2037.patch")))))
    (build-system gnu-build-system)
    (home-page "https://www.gnu.org/software/cpio/")
    (synopsis "Manage cpio and tar file archives")

A gnu/packages/patches/cpio-CVE-2016-2037.patch => gnu/packages/patches/cpio-CVE-2016-2037.patch +49 -0
@@ 0,0 1,49 @@
Fix CVE-2016-2037 (out of bounds write in process_copy_in()).

Copied from upstream mailing list:
https://lists.gnu.org/archive/html/bug-cpio/2016-01/msg00005.html

---

 Other calls to cpio_safer_name_suffix seem to be safe.
 .
 * src/copyin.c (process_copy_in):  Make sure that file_hdr.c_name
 has at least two bytes allocated.
 * src/util.c (cpio_safer_name_suffix): Document that use of this
 function requires to be careful.
Author: Pavel Raiskup <praiskup@redhat.com>

---
 src/copyin.c | 2 ++
 src/util.c   | 5 ++++-
 2 files changed, 6 insertions(+), 1 deletion(-)

Index: cpio-2.11+dfsg/src/copyin.c
===================================================================
--- cpio-2.11+dfsg.orig/src/copyin.c
+++ cpio-2.11+dfsg/src/copyin.c
@@ -1433,6 +1433,8 @@ process_copy_in ()
 	  break;
 	}
 
+      if (file_hdr.c_namesize <= 1)
+        file_hdr.c_name = xrealloc(file_hdr.c_name, 2);
       cpio_safer_name_suffix (file_hdr.c_name, false, !no_abs_paths_flag,
 			      false);
       
Index: cpio-2.11+dfsg/src/util.c
===================================================================
--- cpio-2.11+dfsg.orig/src/util.c
+++ cpio-2.11+dfsg/src/util.c
@@ -1374,7 +1374,10 @@ set_file_times (int fd,
 }
 
 /* Do we have to ignore absolute paths, and if so, does the filename
-   have an absolute path?  */
+   have an absolute path?
+   Before calling this function make sure that the allocated NAME buffer has
+   capacity at least 2 bytes to allow us to store the "." string inside.  */
+
 void
 cpio_safer_name_suffix (char *name, bool link_target, bool absolute_names,
 			bool strip_leading_dots)