* 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.
		
			
				
	
	
		
			49 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
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)
 |