Merge branch 'master' into core-updates
This commit is contained in:
		
						commit
						b81378251c
					
				
					 34 changed files with 779 additions and 752 deletions
				
			
		|  | @ -538,9 +538,19 @@ dist_patch_DATA =						\ | |||
|   gnu/packages/patches/libtheora-config-guess.patch		\ | ||||
|   gnu/packages/patches/libtool-skip-tests2.patch		\ | ||||
|   gnu/packages/patches/libssh-CVE-2014-0017.patch		\ | ||||
|   gnu/packages/patches/libunwind-CVE-2015-3239.patch		\ | ||||
|   gnu/packages/patches/libwmf-CAN-2004-0941.patch		\ | ||||
|   gnu/packages/patches/libwmf-CVE-2006-3376.patch		\ | ||||
|   gnu/packages/patches/libwmf-CVE-2007-0455.patch		\ | ||||
|   gnu/packages/patches/libwmf-CVE-2007-2756.patch		\ | ||||
|   gnu/packages/patches/libwmf-CVE-2007-3472.patch		\ | ||||
|   gnu/packages/patches/libwmf-CVE-2007-3473.patch		\ | ||||
|   gnu/packages/patches/libwmf-CVE-2007-3477.patch		\ | ||||
|   gnu/packages/patches/libwmf-CVE-2009-1364.patch		\ | ||||
|   gnu/packages/patches/libwmf-CVE-2015-0848+4588+4695+4696.patch \ | ||||
|   gnu/packages/patches/libwmf-CVE-2009-3546.patch		\ | ||||
|   gnu/packages/patches/libwmf-CVE-2015-0848+CVE-2015-4588.patch	\ | ||||
|   gnu/packages/patches/libwmf-CVE-2015-4695.patch		\ | ||||
|   gnu/packages/patches/libwmf-CVE-2015-4696.patch		\ | ||||
|   gnu/packages/patches/lirc-localstatedir.patch			\ | ||||
|   gnu/packages/patches/libpthread-glibc-preparation.patch	\ | ||||
|   gnu/packages/patches/lm-sensors-hwmon-attrs.patch		\ | ||||
|  | @ -644,8 +654,11 @@ dist_patch_DATA =						\ | |||
|   gnu/packages/patches/unzip-CVE-2014-8141.patch		\ | ||||
|   gnu/packages/patches/unzip-CVE-2014-9636.patch		\ | ||||
|   gnu/packages/patches/unzip-allow-greater-hostver-values.patch	\ | ||||
|   gnu/packages/patches/unzip-increase-size-of-cfactorstr.patch	\ | ||||
|   gnu/packages/patches/unzip-attribs-overflow.patch		\ | ||||
|   gnu/packages/patches/unzip-fix-overflows-and-infloop.patch	\ | ||||
|   gnu/packages/patches/unzip-format-secure.patch		\ | ||||
|   gnu/packages/patches/unzip-initialize-symlink-flag.patch	\ | ||||
|   gnu/packages/patches/unzip-overflow-long-fsize.patch		\ | ||||
|   gnu/packages/patches/unzip-remove-build-date.patch		\ | ||||
|   gnu/packages/patches/util-linux-tests.patch			\ | ||||
|   gnu/packages/patches/upower-builddir.patch			\ | ||||
|  | @ -660,15 +673,6 @@ dist_patch_DATA =						\ | |||
|   gnu/packages/patches/wicd-template-instantiation.patch	\ | ||||
|   gnu/packages/patches/wicd-urwid-1.3.patch			\ | ||||
|   gnu/packages/patches/wmctrl-64-fix.patch			\ | ||||
|   gnu/packages/patches/wpa-supplicant-CVE-2015-1863.patch	\ | ||||
|   gnu/packages/patches/wpa-supplicant-2015-2-fix.patch		\ | ||||
|   gnu/packages/patches/wpa-supplicant-2015-3-fix.patch		\ | ||||
|   gnu/packages/patches/wpa-supplicant-2015-4-fix-pt1.patch	\ | ||||
|   gnu/packages/patches/wpa-supplicant-2015-4-fix-pt2.patch	\ | ||||
|   gnu/packages/patches/wpa-supplicant-2015-4-fix-pt3.patch	\ | ||||
|   gnu/packages/patches/wpa-supplicant-2015-4-fix-pt4.patch	\ | ||||
|   gnu/packages/patches/wpa-supplicant-2015-4-fix-pt5.patch	\ | ||||
|   gnu/packages/patches/wpa-supplicant-2015-5-fix.patch		\ | ||||
|   gnu/packages/patches/xf86-video-ark-remove-mibstore.patch	\ | ||||
|   gnu/packages/patches/xf86-video-ast-remove-mibstore.patch	\ | ||||
|   gnu/packages/patches/xf86-video-geode-glibc-2.20.patch	\ | ||||
|  |  | |||
|  | @ -707,7 +707,7 @@ commands and their arguments.") | |||
| (define-public wpa-supplicant-minimal | ||||
|   (package | ||||
|     (name "wpa-supplicant-minimal") | ||||
|     (version "2.4") | ||||
|     (version "2.5") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append | ||||
|  | @ -716,17 +716,7 @@ commands and their arguments.") | |||
|                     ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "08li21q1wjn5chrv289w666il9ah1w419y3dkq2rl4wnq0rci385")) | ||||
|               (patches | ||||
|                (map search-patch '("wpa-supplicant-CVE-2015-1863.patch" | ||||
|                                    "wpa-supplicant-2015-2-fix.patch" | ||||
|                                    "wpa-supplicant-2015-3-fix.patch" | ||||
|                                    "wpa-supplicant-2015-4-fix-pt1.patch" | ||||
|                                    "wpa-supplicant-2015-4-fix-pt2.patch" | ||||
|                                    "wpa-supplicant-2015-4-fix-pt3.patch" | ||||
|                                    "wpa-supplicant-2015-4-fix-pt4.patch" | ||||
|                                    "wpa-supplicant-2015-4-fix-pt5.patch" | ||||
|                                    "wpa-supplicant-2015-5-fix.patch"))))) | ||||
|                 "05mkp5bx1c3z7h5biddsv0p49gkrq9ksany3anp4wdiv92p5prfc")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      '(#:phases (alist-replace | ||||
|  |  | |||
|  | @ -148,9 +148,18 @@ collection of tools for doing simple manipulations of TIFF images.") | |||
|         (sha256 | ||||
|          (base32 "1y3wba4q8pl7kr51212jwrsz1x6nslsx1gsjml1x0i8549lmqd2v")) | ||||
|         (patches | ||||
|          (map search-patch '("libwmf-CVE-2006-3376.patch" | ||||
|          (map search-patch '("libwmf-CAN-2004-0941.patch" | ||||
|                              "libwmf-CVE-2006-3376.patch" | ||||
|                              "libwmf-CVE-2007-0455.patch" | ||||
|                              "libwmf-CVE-2007-2756.patch" | ||||
|                              "libwmf-CVE-2007-3472.patch" | ||||
|                              "libwmf-CVE-2007-3473.patch" | ||||
|                              "libwmf-CVE-2007-3477.patch" | ||||
|                              "libwmf-CVE-2009-1364.patch" | ||||
|                              "libwmf-CVE-2015-0848+4588+4695+4696.patch"))))) | ||||
|                              "libwmf-CVE-2009-3546.patch" | ||||
|                              "libwmf-CVE-2015-0848+CVE-2015-4588.patch" | ||||
|                              "libwmf-CVE-2015-4695.patch" | ||||
|                              "libwmf-CVE-2015-4696.patch"))))) | ||||
| 
 | ||||
|     (build-system gnu-build-system) | ||||
|     (inputs | ||||
|  |  | |||
|  | @ -1,5 +1,6 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2013, 2014 Ludovic Courtès <ludo@gnu.org> | ||||
| ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org> | ||||
| ;;; | ||||
| ;;; This file is part of GNU Guix. | ||||
| ;;; | ||||
|  | @ -18,6 +19,7 @@ | |||
| 
 | ||||
| (define-module (gnu packages libunwind) | ||||
|   #:use-module (guix packages) | ||||
|   #:use-module (gnu packages) | ||||
|   #:use-module (guix download) | ||||
|   #:use-module (guix build-system gnu) | ||||
|   #:use-module (guix licenses)) | ||||
|  | @ -32,7 +34,8 @@ | |||
|                                  version ".tar.gz")) | ||||
|              (sha256 | ||||
|               (base32 | ||||
|                "16nhx2pahh9d62mvszc88q226q5lwjankij276fxwrm8wb50zzlx")))) | ||||
|                "16nhx2pahh9d62mvszc88q226q5lwjankij276fxwrm8wb50zzlx")) | ||||
|              (patches (list (search-patch "libunwind-CVE-2015-3239.patch"))))) | ||||
|     (build-system gnu-build-system) | ||||
|     (arguments | ||||
|      ;; FIXME: As of glibc 2.17, we get 3 out of 34 test failures. | ||||
|  |  | |||
|  | @ -208,7 +208,8 @@ Git-friendly development workflow.") | |||
|                 "0icdfzhsbgf89925gc8gl3fm8z2xzszzlib0v9dj5wyzkyv3a342")) | ||||
|               (file-name (string-append name "-" version ".tar.gz")))) | ||||
|     (build-system gnu-build-system) | ||||
|     (native-inputs `(("which" ,which))) | ||||
|     (native-inputs `(("ocaml" ,ocaml) | ||||
|                      ("which" ,which))) | ||||
|     (inputs `(("ocaml" ,ocaml))) | ||||
|     (arguments | ||||
|      '(#:tests? #f                                ;no documented test target | ||||
|  |  | |||
							
								
								
									
										17
									
								
								gnu/packages/patches/libunwind-CVE-2015-3239.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								gnu/packages/patches/libunwind-CVE-2015-3239.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,17 @@ | |||
| Copied from Fedora. | ||||
| 
 | ||||
| https://bugzilla.redhat.com/show_bug.cgi?id=1232265 | ||||
| http://pkgs.fedoraproject.org/cgit/libunwind.git/tree/libunwind-1.1-fix-CVE-2015-3239.patch | ||||
| 
 | ||||
| diff -up libunwind-1.1/include/dwarf_i.h.CVE20153239 libunwind-1.1/include/dwarf_i.h
 | ||||
| --- libunwind-1.1/include/dwarf_i.h.CVE20153239	2015-07-10 13:38:36.404996748 -0400
 | ||||
| +++ libunwind-1.1/include/dwarf_i.h	2015-07-10 13:39:25.050707613 -0400
 | ||||
| @@ -20,7 +20,7 @@
 | ||||
|  extern const uint8_t dwarf_to_unw_regnum_map[DWARF_REGNUM_MAP_LENGTH]; | ||||
|  /* REG is evaluated multiple times; it better be side-effects free!  */ | ||||
|  # define dwarf_to_unw_regnum(reg)					  \ | ||||
| -  (((reg) <= DWARF_REGNUM_MAP_LENGTH) ? dwarf_to_unw_regnum_map[reg] : 0)
 | ||||
| +  (((reg) < DWARF_REGNUM_MAP_LENGTH) ? dwarf_to_unw_regnum_map[reg] : 0)
 | ||||
|  #endif | ||||
|   | ||||
|  #ifdef UNW_LOCAL_ONLY | ||||
							
								
								
									
										21
									
								
								gnu/packages/patches/libwmf-CAN-2004-0941.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								gnu/packages/patches/libwmf-CAN-2004-0941.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,21 @@ | |||
| Copied from Fedora. | ||||
| 
 | ||||
| http://pkgs.fedoraproject.org/cgit/libwmf.git/tree/libwmf-0.2.8.4-CAN-2004-0941.patch | ||||
| 
 | ||||
| --- libwmf-0.2.8.4/src/extra/gd/gd_png.c	2004-11-11 14:02:37.407589824 -0500
 | ||||
| +++ libwmf-0.2.8.4/src/extra/gd/gd_png.c	2004-11-11 14:04:29.672522960 -0500
 | ||||
| @@ -188,6 +188,14 @@
 | ||||
|   | ||||
|    png_get_IHDR (png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, | ||||
|  		&interlace_type, NULL, NULL); | ||||
| +  if (overflow2(sizeof (int), width)) 
 | ||||
| +    {
 | ||||
| +      return NULL;
 | ||||
| +    }
 | ||||
| +  if (overflow2(sizeof (int) * width, height)) 
 | ||||
| +    {
 | ||||
| +      return NULL;
 | ||||
| +    }  
 | ||||
|    if ((color_type == PNG_COLOR_TYPE_RGB) || | ||||
|        (color_type == PNG_COLOR_TYPE_RGB_ALPHA)) | ||||
|      { | ||||
							
								
								
									
										15
									
								
								gnu/packages/patches/libwmf-CVE-2007-0455.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								gnu/packages/patches/libwmf-CVE-2007-0455.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | |||
| Copied from Fedora. | ||||
| 
 | ||||
| http://pkgs.fedoraproject.org/cgit/libwmf.git/tree/libwmf-0.2.8.4-CVE-2007-0455.patch | ||||
| 
 | ||||
| --- libwmf-0.2.8.4/src/extra/gd/gdft.c	2010-12-06 11:18:26.000000000 +0000
 | ||||
| +++ libwmf-0.2.8.4/src/extra/gd/gdft.c	2010-12-06 11:21:09.000000000 +0000
 | ||||
| @@ -811,7 +811,7 @@
 | ||||
|  	    { | ||||
|  	      ch = c & 0xFF;	/* don't extend sign */ | ||||
|  	    } | ||||
| -	  next++;
 | ||||
| +	  if (*next) next++;
 | ||||
|  	} | ||||
|        else | ||||
|  	{ | ||||
							
								
								
									
										20
									
								
								gnu/packages/patches/libwmf-CVE-2007-2756.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								gnu/packages/patches/libwmf-CVE-2007-2756.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | |||
| Copied from Fedora. | ||||
| 
 | ||||
| http://pkgs.fedoraproject.org/cgit/libwmf.git/tree/libwmf-0.2.8.4-CVE-2007-2756.patch | ||||
| 
 | ||||
| --- libwmf-0.2.8.4/src/extra/gd/gd_png.c	1 Apr 2007 20:41:01 -0000	1.21.2.1
 | ||||
| +++ libwmf-0.2.8.4/src/extra/gd/gd_png.c	16 May 2007 19:06:11 -0000
 | ||||
| @@ -78,8 +78,11 @@
 | ||||
|  gdPngReadData (png_structp png_ptr, | ||||
|  	       png_bytep data, png_size_t length) | ||||
|  { | ||||
| -  gdGetBuf (data, length, (gdIOCtx *)
 | ||||
| -	    png_get_io_ptr (png_ptr));
 | ||||
| +  int check;
 | ||||
| +  check = gdGetBuf (data, length, (gdIOCtx *) png_get_io_ptr (png_ptr));
 | ||||
| +  if (check != length) {
 | ||||
| +    png_error(png_ptr, "Read Error: truncated data");
 | ||||
| +  }
 | ||||
|  } | ||||
|   | ||||
|  static void | ||||
							
								
								
									
										63
									
								
								gnu/packages/patches/libwmf-CVE-2007-3472.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								gnu/packages/patches/libwmf-CVE-2007-3472.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,63 @@ | |||
| Based on a patch from Fedora. | ||||
| 
 | ||||
| http://pkgs.fedoraproject.org/cgit/libwmf.git/tree/libwmf-0.2.8.4-CVE-2007-3472.patch | ||||
| 
 | ||||
| --- libwmf-0.2.8.4/src/extra/gd/gd.c
 | ||||
| +++ libwmf-0.2.8.4/src/extra/gd/gd.c
 | ||||
| @@ -106,6 +106,18 @@
 | ||||
|    gdImagePtr im; | ||||
|    unsigned long cpa_size; | ||||
|   | ||||
| +  if (overflow2(sx, sy)) {
 | ||||
| +    return NULL;
 | ||||
| +  }
 | ||||
| +
 | ||||
| +  if (overflow2(sizeof (int *), sy)) {
 | ||||
| +    return NULL;
 | ||||
| +  }
 | ||||
| +
 | ||||
| +  if (overflow2(sizeof(int), sx)) {
 | ||||
| +    return NULL;
 | ||||
| +  }
 | ||||
| +
 | ||||
|    im = (gdImage *) gdMalloc (sizeof (gdImage)); | ||||
|    if (im == 0) return 0; | ||||
|    memset (im, 0, sizeof (gdImage)); | ||||
| --- libwmf-0.2.8.4/src/extra/gd/gdhelpers.c	2010-12-06 11:47:31.000000000 +0000
 | ||||
| +++ libwmf-0.2.8.4/src/extra/gd/gdhelpers.c	2010-12-06 11:48:04.000000000 +0000
 | ||||
| @@ -2,6 +2,7 @@
 | ||||
|  #include "gdhelpers.h" | ||||
|  #include <stdlib.h> | ||||
|  #include <string.h> | ||||
| +#include <limits.h>
 | ||||
|   | ||||
|  /* TBB: gd_strtok_r is not portable; provide an implementation */ | ||||
|   | ||||
| @@ -94,3 +95,18 @@
 | ||||
|  { | ||||
|    free (ptr); | ||||
|  } | ||||
| +
 | ||||
| +int overflow2(int a, int b)
 | ||||
| +{
 | ||||
| +	if(a < 0 || b < 0) {
 | ||||
| +		fprintf(stderr, "gd warning: one parameter to a memory allocation multiplication is negative, failing operation gracefully\n");
 | ||||
| +		return 1;
 | ||||
| +	}
 | ||||
| +	if(b == 0)
 | ||||
| +		return 0;
 | ||||
| +	if(a > INT_MAX / b) {
 | ||||
| +		fprintf(stderr, "gd warning: product of memory allocation multiplication would exceed INT_MAX, failing operation gracefully\n");
 | ||||
| +		return 1;
 | ||||
| +	}
 | ||||
| +	return 0;
 | ||||
| +}
 | ||||
| --- libwmf-0.2.8.4/src/extra/gd/gdhelpers.h	2010-12-06 11:47:17.000000000 +0000
 | ||||
| +++ libwmf-0.2.8.4/src/extra/gd/gdhelpers.h	2010-12-06 11:48:36.000000000 +0000
 | ||||
| @@ -15,4 +15,6 @@
 | ||||
|  void *gdMalloc(size_t size); | ||||
|  void *gdRealloc(void *ptr, size_t size); | ||||
|   | ||||
| +int overflow2(int a, int b);
 | ||||
| +
 | ||||
|  #endif /* GDHELPERS_H */ | ||||
							
								
								
									
										17
									
								
								gnu/packages/patches/libwmf-CVE-2007-3473.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								gnu/packages/patches/libwmf-CVE-2007-3473.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,17 @@ | |||
| Copied from Fedora. | ||||
| 
 | ||||
| http://pkgs.fedoraproject.org/cgit/libwmf.git/tree/libwmf-0.2.8.4-CVE-2007-3473.patch | ||||
| 
 | ||||
| --- libwmf-0.2.8.4/src/extra/gd/gd.c
 | ||||
| +++ libwmf-0.2.8.4/src/extra/gd/gd.c
 | ||||
| @@ -2483,6 +2483,10 @@ BGD_DECLARE(gdImagePtr) gdImageCreateFromXbm (FILE * fd)
 | ||||
|      } | ||||
|    bytes = (w * h / 8) + 1; | ||||
|    im = gdImageCreate (w, h); | ||||
| +  if (!im) {
 | ||||
| +    return 0;
 | ||||
| +  }
 | ||||
| +
 | ||||
|    gdImageColorAllocate (im, 255, 255, 255); | ||||
|    gdImageColorAllocate (im, 0, 0, 0); | ||||
|    x = 0; | ||||
							
								
								
									
										42
									
								
								gnu/packages/patches/libwmf-CVE-2007-3477.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								gnu/packages/patches/libwmf-CVE-2007-3477.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,42 @@ | |||
| Copied from Fedora. | ||||
| 
 | ||||
| http://pkgs.fedoraproject.org/cgit/libwmf.git/tree/libwmf-0.2.8.4-CVE-2007-3477.patch | ||||
| 
 | ||||
| --- libwmf-0.2.8.4/src/extra/gd/gd.c
 | ||||
| +++ libwmf-0.2.8.4/src/extra/gd/gd.c
 | ||||
| @@ -1335,10 +1335,31 @@
 | ||||
|    int w2, h2; | ||||
|    w2 = w / 2; | ||||
|    h2 = h / 2; | ||||
| -  while (e < s)
 | ||||
| -    {
 | ||||
| -      e += 360;
 | ||||
| -    }
 | ||||
| +
 | ||||
| +  if ((s % 360)  == (e % 360)) {
 | ||||
| +         s = 0; e = 360;
 | ||||
| +  } else {
 | ||||
| +         if (s > 360) {
 | ||||
| +                 s = s % 360;
 | ||||
| +         }
 | ||||
| +
 | ||||
| +         if (e > 360) {
 | ||||
| +                 e = e % 360;
 | ||||
| +         }
 | ||||
| +
 | ||||
| +         while (s < 0) {
 | ||||
| +                 s += 360;
 | ||||
| +         }
 | ||||
| +
 | ||||
| +         while (e < s) {
 | ||||
| +                 e += 360;
 | ||||
| +         }
 | ||||
| +
 | ||||
| +         if (s == e) {
 | ||||
| +                 s = 0; e = 360;
 | ||||
| +         }
 | ||||
| +  }
 | ||||
| +
 | ||||
|    for (i = s; (i <= e); i++) | ||||
|      { | ||||
|        int x, y; | ||||
							
								
								
									
										17
									
								
								gnu/packages/patches/libwmf-CVE-2009-3546.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								gnu/packages/patches/libwmf-CVE-2009-3546.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,17 @@ | |||
| Copied from Fedora. | ||||
| 
 | ||||
| http://pkgs.fedoraproject.org/cgit/libwmf.git/tree/libwmf-0.2.8.4-CVE-2009-3546.patch | ||||
| 
 | ||||
| --- libwmf-0.2.8.4/src/extra/gd/gd_gd.c	2010-12-06 14:56:06.000000000 +0000
 | ||||
| +++ libwmf-0.2.8.4/src/extra/gd/gd_gd.c	2010-12-06 14:57:04.000000000 +0000
 | ||||
| @@ -42,6 +42,10 @@
 | ||||
|  	    { | ||||
|  	      goto fail1; | ||||
|  	    } | ||||
| +	  if (&im->colorsTotal > gdMaxColors)
 | ||||
| +	    {
 | ||||
| +	      goto fail1;
 | ||||
| +	    }
 | ||||
|  	} | ||||
|        /* Int to accommodate truecolor single-color transparency */ | ||||
|        if (!gdGetInt (&im->transparent, in)) | ||||
|  | @ -1,189 +0,0 @@ | |||
| Fix CVE-2015-0848, CVE-2015-4588, CVE-2015-4695, and CVE-2015-4696. | ||||
| Copied from Debian. | ||||
| 
 | ||||
| --- libwmf-0.2.8.4.orig/src/player/meta.h
 | ||||
| +++ libwmf-0.2.8.4/src/player/meta.h
 | ||||
| @@ -1565,7 +1565,7 @@ static int meta_rgn_create (wmfAPI* API,
 | ||||
|  	objects = P->objects; | ||||
|   | ||||
|  	i = 0; | ||||
| -	while (objects[i].type && (i < NUM_OBJECTS (API))) i++;
 | ||||
| +	while ((i < NUM_OBJECTS (API)) && objects[i].type) i++;
 | ||||
|   | ||||
|  	if (i == NUM_OBJECTS (API)) | ||||
|  	{	WMF_ERROR (API,"Object out of range!"); | ||||
| @@ -2142,7 +2142,7 @@ static int meta_dib_brush (wmfAPI* API,w
 | ||||
|  	objects = P->objects; | ||||
|   | ||||
|  	i = 0; | ||||
| -	while (objects[i].type && (i < NUM_OBJECTS (API))) i++;
 | ||||
| +	while ((i < NUM_OBJECTS (API)) && objects[i].type) i++;
 | ||||
|   | ||||
|  	if (i == NUM_OBJECTS (API)) | ||||
|  	{	WMF_ERROR (API,"Object out of range!"); | ||||
| @@ -2593,9 +2593,10 @@ static int meta_dc_restore (wmfAPI* API,
 | ||||
|  		polyrect.BR = 0; | ||||
|   | ||||
|  		polyrect.count = 0; | ||||
| +	
 | ||||
| +		if (FR->region_clip) FR->region_clip (API,&polyrect);
 | ||||
|  	} | ||||
|   | ||||
| -	if (FR->region_clip) FR->region_clip (API,&polyrect);
 | ||||
|   | ||||
|  	return (changed); | ||||
|  } | ||||
| @@ -3067,7 +3068,7 @@ static int meta_pen_create (wmfAPI* API,
 | ||||
|  	objects = P->objects; | ||||
|   | ||||
|  	i = 0; | ||||
| -	while (objects[i].type && (i < NUM_OBJECTS (API))) i++;
 | ||||
| +	while ((i < NUM_OBJECTS (API)) && objects[i].type) i++;
 | ||||
|   | ||||
|  	if (i == NUM_OBJECTS (API)) | ||||
|  	{	WMF_ERROR (API,"Object out of range!"); | ||||
| @@ -3181,7 +3182,7 @@ static int meta_brush_create (wmfAPI* AP
 | ||||
|  	objects = P->objects; | ||||
|   | ||||
|  	i = 0; | ||||
| -	while (objects[i].type && (i < NUM_OBJECTS (API))) i++;
 | ||||
| +	while ((i < NUM_OBJECTS (API)) && objects[i].type) i++;
 | ||||
|   | ||||
|  	if (i == NUM_OBJECTS (API)) | ||||
|  	{	WMF_ERROR (API,"Object out of range!"); | ||||
| @@ -3288,7 +3289,7 @@ static int meta_font_create (wmfAPI* API
 | ||||
|  	objects = P->objects; | ||||
|   | ||||
|  	i = 0; | ||||
| -	while (objects[i].type && (i < NUM_OBJECTS (API))) i++;
 | ||||
| +	while ((i < NUM_OBJECTS (API)) && objects[i].type) i++;
 | ||||
|   | ||||
|  	if (i == NUM_OBJECTS (API)) | ||||
|  	{	WMF_ERROR (API,"Object out of range!"); | ||||
| @@ -3396,7 +3397,7 @@ static int meta_palette_create (wmfAPI*
 | ||||
|  	objects = P->objects; | ||||
|   | ||||
|  	i = 0; | ||||
| -	while (objects[i].type && (i < NUM_OBJECTS (API))) i++;
 | ||||
| +	while ((i < NUM_OBJECTS (API)) && objects[i].type) i++;
 | ||||
|   | ||||
|  	if (i == NUM_OBJECTS (API)) | ||||
|  	{	WMF_ERROR (API,"Object out of range!"); | ||||
| --- libwmf-0.2.8.4.orig/src/ipa/ipa.h
 | ||||
| +++ libwmf-0.2.8.4/src/ipa/ipa.h
 | ||||
| @@ -48,7 +48,7 @@ static int            ReadBlobByte (BMPS
 | ||||
|  static unsigned short ReadBlobLSBShort (BMPSource*); | ||||
|  static unsigned long  ReadBlobLSBLong (BMPSource*); | ||||
|  static long           TellBlob (BMPSource*); | ||||
| -static void           DecodeImage (wmfAPI*,wmfBMP*,BMPSource*,unsigned int,unsigned char*);
 | ||||
| +static int            DecodeImage (wmfAPI*,wmfBMP*,BMPSource*,unsigned int,unsigned char*);
 | ||||
|  static void           ReadBMPImage (wmfAPI*,wmfBMP*,BMPSource*); | ||||
|  static int            ExtractColor (wmfAPI*,wmfBMP*,wmfRGB*,unsigned int,unsigned int); | ||||
|  static void           SetColor (wmfAPI*,wmfBMP*,wmfRGB*,unsigned char,unsigned int,unsigned int); | ||||
| --- libwmf-0.2.8.4.orig/src/ipa/ipa/bmp.h
 | ||||
| +++ libwmf-0.2.8.4/src/ipa/ipa/bmp.h
 | ||||
| @@ -859,7 +859,7 @@ static long TellBlob (BMPSource* src)
 | ||||
|  % | ||||
|  % | ||||
|  */ | ||||
| -static void DecodeImage (wmfAPI* API,wmfBMP* bmp,BMPSource* src,unsigned int compression,unsigned char* pixels)
 | ||||
| +static int DecodeImage (wmfAPI* API,wmfBMP* bmp,BMPSource* src,unsigned int compression,unsigned char* pixels)
 | ||||
|  {	int byte; | ||||
|  	int count; | ||||
|  	int i; | ||||
| @@ -870,12 +870,14 @@ static void DecodeImage (wmfAPI* API,wmf
 | ||||
|  	U32 u; | ||||
|   | ||||
|  	unsigned char* q; | ||||
| +	unsigned char* end;
 | ||||
|   | ||||
|  	for (u = 0; u < ((U32) bmp->width * (U32) bmp->height); u++) pixels[u] = 0; | ||||
|   | ||||
|  	byte = 0; | ||||
|  	x = 0; | ||||
|  	q = pixels; | ||||
| +	end = pixels + bmp->width * bmp->height;
 | ||||
|   | ||||
|  	for (y = 0; y < bmp->height; ) | ||||
|  	{	count = ReadBlobByte (src); | ||||
| @@ -884,7 +886,10 @@ static void DecodeImage (wmfAPI* API,wmf
 | ||||
|  		{	/* Encoded mode. */ | ||||
|  			byte = ReadBlobByte (src); | ||||
|  			for (i = 0; i < count; i++) | ||||
| -			{	if (compression == 1)
 | ||||
| +			{	
 | ||||
| +				if (q == end)
 | ||||
| +					return 0;
 | ||||
| +			 	if (compression == 1)
 | ||||
|  				{	(*(q++)) = (unsigned char) byte; | ||||
|  				} | ||||
|  				else | ||||
| @@ -896,13 +901,15 @@ static void DecodeImage (wmfAPI* API,wmf
 | ||||
|  		else | ||||
|  		{	/* Escape mode. */ | ||||
|  			count = ReadBlobByte (src); | ||||
| -			if (count == 0x01) return;
 | ||||
| +			if (count == 0x01) return 1;
 | ||||
|  			switch (count) | ||||
|  			{ | ||||
|  			case 0x00: | ||||
|  			 {	/* End of line. */ | ||||
|  				x = 0; | ||||
|  				y++; | ||||
| +				if (y >= bmp->height)
 | ||||
| +					return 0;
 | ||||
|  				q = pixels + y * bmp->width; | ||||
|  				break; | ||||
|  			 } | ||||
| @@ -910,13 +917,20 @@ static void DecodeImage (wmfAPI* API,wmf
 | ||||
|  			 {	/* Delta mode. */ | ||||
|  				x += ReadBlobByte (src); | ||||
|  				y += ReadBlobByte (src); | ||||
| +				if (y >= bmp->height)
 | ||||
| +					return 0;
 | ||||
| +				if (x >= bmp->width)
 | ||||
| +					return 0;
 | ||||
|  				q = pixels + y * bmp->width + x; | ||||
|  				break; | ||||
|  			 } | ||||
|  			default: | ||||
|  			 {	/* Absolute mode. */ | ||||
|  				for (i = 0; i < count; i++) | ||||
| -				{	if (compression == 1)
 | ||||
| +				{
 | ||||
| +					if (q == end)
 | ||||
| +						return 0;
 | ||||
| +					if (compression == 1)
 | ||||
|  					{	(*(q++)) = ReadBlobByte (src); | ||||
|  					} | ||||
|  					else | ||||
| @@ -943,7 +957,7 @@ static void DecodeImage (wmfAPI* API,wmf
 | ||||
|  	byte = ReadBlobByte (src);  /* end of line */ | ||||
|  	byte = ReadBlobByte (src); | ||||
|   | ||||
| -	return;
 | ||||
| +	return 1;
 | ||||
|  } | ||||
|   | ||||
|  /* | ||||
| @@ -1143,8 +1157,18 @@ static void ReadBMPImage (wmfAPI* API,wm
 | ||||
|  		} | ||||
|  	} | ||||
|  	else | ||||
| -	{	/* Convert run-length encoded raster pixels. */
 | ||||
| -		DecodeImage (API,bmp,src,(unsigned int) bmp_info.compression,data->image);
 | ||||
| +	{
 | ||||
| +		if (bmp_info.bits_per_pixel == 8)	/* Convert run-length encoded raster pixels. */
 | ||||
| +		{
 | ||||
| +			if (!DecodeImage (API,bmp,src,(unsigned int) bmp_info.compression,data->image))
 | ||||
| +			{	WMF_ERROR (API,"corrupt bmp");
 | ||||
| +				API->err = wmf_E_BadFormat;
 | ||||
| +			}
 | ||||
| +		}
 | ||||
| +		else
 | ||||
| +		{	WMF_ERROR (API,"Unexpected pixel depth");
 | ||||
| +			API->err = wmf_E_BadFormat;
 | ||||
| +		}
 | ||||
|  	} | ||||
|   | ||||
|  	if (ERR (API)) | ||||
							
								
								
									
										122
									
								
								gnu/packages/patches/libwmf-CVE-2015-0848+CVE-2015-4588.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										122
									
								
								gnu/packages/patches/libwmf-CVE-2015-0848+CVE-2015-4588.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,122 @@ | |||
| Copied from Fedora. | ||||
| 
 | ||||
| http://pkgs.fedoraproject.org/cgit/libwmf.git/tree/libwmf-0.2.8.4-CVE-2015-0848+CVE-2015-4588.patch | ||||
| 
 | ||||
| --- libwmf-0.2.8.4/src/ipa/ipa/bmp.h	2015-06-08 14:46:24.591876404 +0100
 | ||||
| +++ libwmf-0.2.8.4/src/ipa/ipa/bmp.h	2015-06-08 14:46:35.345993247 +0100
 | ||||
| @@ -859,7 +859,7 @@
 | ||||
|  % | ||||
|  % | ||||
|  */ | ||||
| -static void DecodeImage (wmfAPI* API,wmfBMP* bmp,BMPSource* src,unsigned int compression,unsigned char* pixels)
 | ||||
| +static int DecodeImage (wmfAPI* API,wmfBMP* bmp,BMPSource* src,unsigned int compression,unsigned char* pixels)
 | ||||
|  {	int byte; | ||||
|  	int count; | ||||
|  	int i; | ||||
| @@ -870,12 +870,14 @@
 | ||||
|  	U32 u; | ||||
|   | ||||
|  	unsigned char* q; | ||||
| +	unsigned char* end;
 | ||||
|   | ||||
|  	for (u = 0; u < ((U32) bmp->width * (U32) bmp->height); u++) pixels[u] = 0; | ||||
|   | ||||
|  	byte = 0; | ||||
|  	x = 0; | ||||
|  	q = pixels; | ||||
| +	end = pixels + bmp->width * bmp->height;
 | ||||
|   | ||||
|  	for (y = 0; y < bmp->height; ) | ||||
|  	{	count = ReadBlobByte (src); | ||||
| @@ -884,7 +886,10 @@
 | ||||
|  		{	/* Encoded mode. */ | ||||
|  			byte = ReadBlobByte (src); | ||||
|  			for (i = 0; i < count; i++) | ||||
| -			{	if (compression == 1)
 | ||||
| +			{	
 | ||||
| +				if (q == end)
 | ||||
| +					return 0;
 | ||||
| +			 	if (compression == 1)
 | ||||
|  				{	(*(q++)) = (unsigned char) byte; | ||||
|  				} | ||||
|  				else | ||||
| @@ -896,13 +901,15 @@
 | ||||
|  		else | ||||
|  		{	/* Escape mode. */ | ||||
|  			count = ReadBlobByte (src); | ||||
| -			if (count == 0x01) return;
 | ||||
| +			if (count == 0x01) return 1;
 | ||||
|  			switch (count) | ||||
|  			{ | ||||
|  			case 0x00: | ||||
|  			 {	/* End of line. */ | ||||
|  				x = 0; | ||||
|  				y++; | ||||
| +				if (y >= bmp->height)
 | ||||
| +					return 0;
 | ||||
|  				q = pixels + y * bmp->width; | ||||
|  				break; | ||||
|  			 } | ||||
| @@ -910,13 +917,20 @@
 | ||||
|  			 {	/* Delta mode. */ | ||||
|  				x += ReadBlobByte (src); | ||||
|  				y += ReadBlobByte (src); | ||||
| +				if (y >= bmp->height)
 | ||||
| +					return 0;
 | ||||
| +				if (x >= bmp->width)
 | ||||
| +					return 0;
 | ||||
|  				q = pixels + y * bmp->width + x; | ||||
|  				break; | ||||
|  			 } | ||||
|  			default: | ||||
|  			 {	/* Absolute mode. */ | ||||
|  				for (i = 0; i < count; i++) | ||||
| -				{	if (compression == 1)
 | ||||
| +				{
 | ||||
| +					if (q == end)
 | ||||
| +						return 0;
 | ||||
| +					if (compression == 1)
 | ||||
|  					{	(*(q++)) = ReadBlobByte (src); | ||||
|  					} | ||||
|  					else | ||||
| @@ -943,7 +957,7 @@
 | ||||
|  	byte = ReadBlobByte (src);  /* end of line */ | ||||
|  	byte = ReadBlobByte (src); | ||||
|   | ||||
| -	return;
 | ||||
| +	return 1;
 | ||||
|  } | ||||
|   | ||||
|  /* | ||||
| @@ -1143,8 +1157,18 @@
 | ||||
|  		} | ||||
|  	} | ||||
|  	else | ||||
| -	{	/* Convert run-length encoded raster pixels. */
 | ||||
| -		DecodeImage (API,bmp,src,(unsigned int) bmp_info.compression,data->image);
 | ||||
| +	{
 | ||||
| +		if (bmp_info.bits_per_pixel == 8)	/* Convert run-length encoded raster pixels. */
 | ||||
| +		{
 | ||||
| +			if (!DecodeImage (API,bmp,src,(unsigned int) bmp_info.compression,data->image))
 | ||||
| +			{	WMF_ERROR (API,"corrupt bmp");
 | ||||
| +				API->err = wmf_E_BadFormat;
 | ||||
| +			}
 | ||||
| +		}
 | ||||
| +		else
 | ||||
| +		{	WMF_ERROR (API,"Unexpected pixel depth");
 | ||||
| +			API->err = wmf_E_BadFormat;
 | ||||
| +		}
 | ||||
|  	} | ||||
|   | ||||
|  	if (ERR (API)) | ||||
| --- libwmf-0.2.8.4/src/ipa/ipa.h	2015-06-08 14:46:24.590876393 +0100
 | ||||
| +++ libwmf-0.2.8.4/src/ipa/ipa.h	2015-06-08 14:46:35.345993247 +0100
 | ||||
| @@ -48,7 +48,7 @@
 | ||||
|  static unsigned short ReadBlobLSBShort (BMPSource*); | ||||
|  static unsigned long  ReadBlobLSBLong (BMPSource*); | ||||
|  static long           TellBlob (BMPSource*); | ||||
| -static void           DecodeImage (wmfAPI*,wmfBMP*,BMPSource*,unsigned int,unsigned char*);
 | ||||
| +static int            DecodeImage (wmfAPI*,wmfBMP*,BMPSource*,unsigned int,unsigned char*);
 | ||||
|  static void           ReadBMPImage (wmfAPI*,wmfBMP*,BMPSource*); | ||||
|  static int            ExtractColor (wmfAPI*,wmfBMP*,wmfRGB*,unsigned int,unsigned int); | ||||
|  static void           SetColor (wmfAPI*,wmfBMP*,wmfRGB*,unsigned char,unsigned int,unsigned int); | ||||
							
								
								
									
										60
									
								
								gnu/packages/patches/libwmf-CVE-2015-4695.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								gnu/packages/patches/libwmf-CVE-2015-4695.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,60 @@ | |||
| Copied from Fedora. | ||||
| 
 | ||||
| http://pkgs.fedoraproject.org/cgit/libwmf.git/tree/libwmf-0.2.8.4-CVE-2015-4695.patch | ||||
| 
 | ||||
| --- libwmf-0.2.8.4/src/player/meta.h
 | ||||
| +++ libwmf-0.2.8.4/src/player/meta.h
 | ||||
| @@ -1565,7 +1565,7 @@ static int meta_rgn_create (wmfAPI* API,
 | ||||
|  	objects = P->objects; | ||||
|   | ||||
|  	i = 0; | ||||
| -	while (objects[i].type && (i < NUM_OBJECTS (API))) i++;
 | ||||
| +	while ((i < NUM_OBJECTS (API)) && objects[i].type) i++;
 | ||||
|   | ||||
|  	if (i == NUM_OBJECTS (API)) | ||||
|  	{	WMF_ERROR (API,"Object out of range!"); | ||||
| @@ -2142,7 +2142,7 @@ static int meta_dib_brush (wmfAPI* API,w
 | ||||
|  	objects = P->objects; | ||||
|   | ||||
|  	i = 0; | ||||
| -	while (objects[i].type && (i < NUM_OBJECTS (API))) i++;
 | ||||
| +	while ((i < NUM_OBJECTS (API)) && objects[i].type) i++;
 | ||||
|   | ||||
|  	if (i == NUM_OBJECTS (API)) | ||||
|  	{	WMF_ERROR (API,"Object out of range!"); | ||||
| @@ -3067,7 +3067,7 @@ static int meta_pen_create (wmfAPI* API,
 | ||||
|  	objects = P->objects; | ||||
|   | ||||
|  	i = 0; | ||||
| -	while (objects[i].type && (i < NUM_OBJECTS (API))) i++;
 | ||||
| +	while ((i < NUM_OBJECTS (API)) && objects[i].type) i++;
 | ||||
|   | ||||
|  	if (i == NUM_OBJECTS (API)) | ||||
|  	{	WMF_ERROR (API,"Object out of range!"); | ||||
| @@ -3181,7 +3181,7 @@ static int meta_brush_create (wmfAPI* AP
 | ||||
|  	objects = P->objects; | ||||
|   | ||||
|  	i = 0; | ||||
| -	while (objects[i].type && (i < NUM_OBJECTS (API))) i++;
 | ||||
| +	while ((i < NUM_OBJECTS (API)) && objects[i].type) i++;
 | ||||
|   | ||||
|  	if (i == NUM_OBJECTS (API)) | ||||
|  	{	WMF_ERROR (API,"Object out of range!"); | ||||
| @@ -3288,7 +3288,7 @@ static int meta_font_create (wmfAPI* API
 | ||||
|  	objects = P->objects; | ||||
|   | ||||
|  	i = 0; | ||||
| -	while (objects[i].type && (i < NUM_OBJECTS (API))) i++;
 | ||||
| +	while ((i < NUM_OBJECTS (API)) && objects[i].type) i++;
 | ||||
|   | ||||
|  	if (i == NUM_OBJECTS (API)) | ||||
|  	{	WMF_ERROR (API,"Object out of range!"); | ||||
| @@ -3396,7 +3396,7 @@ static int meta_palette_create (wmfAPI*
 | ||||
|  	objects = P->objects; | ||||
|   | ||||
|  	i = 0; | ||||
| -	while (objects[i].type && (i < NUM_OBJECTS (API))) i++;
 | ||||
| +	while ((i < NUM_OBJECTS (API)) && objects[i].type) i++;
 | ||||
|   | ||||
|  	if (i == NUM_OBJECTS (API)) | ||||
|  	{	WMF_ERROR (API,"Object out of range!"); | ||||
							
								
								
									
										27
									
								
								gnu/packages/patches/libwmf-CVE-2015-4696.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								gnu/packages/patches/libwmf-CVE-2015-4696.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,27 @@ | |||
| Copied from Fedora. | ||||
| 
 | ||||
| http://pkgs.fedoraproject.org/cgit/libwmf.git/tree/libwmf-0.2.8.4-CVE-2015-4696.patch | ||||
| 
 | ||||
| --- libwmf-0.2.8.4/src/player/meta.h
 | ||||
| +++ libwmf-0.2.8.4/src/player/meta.h
 | ||||
| @@ -2585,6 +2585,8 @@
 | ||||
|  			polyrect.BR[i] = clip->rects[i].BR; | ||||
|  		} | ||||
|   | ||||
| +		if (FR->region_clip) FR->region_clip (API,&polyrect);
 | ||||
| +
 | ||||
|  		wmf_free (API,polyrect.TL); | ||||
|  		wmf_free (API,polyrect.BR); | ||||
|  	} | ||||
| @@ -2593,9 +2595,10 @@
 | ||||
|  		polyrect.BR = 0; | ||||
|   | ||||
|  		polyrect.count = 0; | ||||
| +	
 | ||||
| +		if (FR->region_clip) FR->region_clip (API,&polyrect);
 | ||||
|  	} | ||||
|   | ||||
| -	if (FR->region_clip) FR->region_clip (API,&polyrect);
 | ||||
|   | ||||
|  	return (changed); | ||||
|  } | ||||
|  | @ -1,40 +1,28 @@ | |||
| Copied from Debian. | ||||
| Copied from Fedora. | ||||
| 
 | ||||
| From: mancha <mancha1 AT zoho DOT com> | ||||
| Date: Mon, 3 Nov 2014 | ||||
| Subject: Info-ZIP UnZip buffer overflow | ||||
| Bug-Debian: http://bugs.debian.org/776589 | ||||
| 
 | ||||
| By carefully crafting a corrupt ZIP archive with "extra fields" that | ||||
| purport to have compressed blocks larger than the corresponding | ||||
| uncompressed blocks in STORED no-compression mode, an attacker can | ||||
| trigger a heap overflow that can result in application crash or | ||||
| possibly have other unspecified impact. | ||||
| 
 | ||||
| This patch ensures that when extra fields use STORED mode, the | ||||
| "compressed" and uncompressed block sizes match. | ||||
| http://pkgs.fedoraproject.org/cgit/unzip.git/plain/unzip-6.0-overflow.patch?id=d18f821e | ||||
| 
 | ||||
| diff --git a/extract.c b/extract.c
 | ||||
| index a0a4929..9ef80b3 100644
 | ||||
| --- a/extract.c
 | ||||
| +++ b/extract.c
 | ||||
| @@ -2228,6 +2228,7 @@
 | ||||
| @@ -2214,6 +2214,7 @@ static int test_compr_eb(__G__ eb, eb_size, compr_offset, test_uc_ebdata)
 | ||||
|      ulg eb_ucsize; | ||||
|      uch *eb_ucptr; | ||||
|      int r; | ||||
| +    ush eb_compr_method;
 | ||||
| +    ush method;
 | ||||
|   | ||||
|      if (compr_offset < 4)                /* field is not compressed: */ | ||||
|          return PK_OK;                    /* do nothing and signal OK */ | ||||
| @@ -2244,6 +2245,14 @@
 | ||||
|       ((eb_ucsize > 0L) && (eb_size <= (compr_offset + EB_CMPRHEADLEN)))) | ||||
|          return IZ_EF_TRUNC;             /* no/bad compressed data! */ | ||||
| @@ -2223,6 +2224,12 @@ static int test_compr_eb(__G__ eb, eb_size, compr_offset, test_uc_ebdata)
 | ||||
|           eb_size <= (compr_offset + EB_CMPRHEADLEN))) | ||||
|          return IZ_EF_TRUNC;               /* no compressed data! */ | ||||
|   | ||||
| +    /* 2014-11-03 Michal Zalewski, SMS.
 | ||||
| +     * For STORE method, compressed and uncompressed sizes must agree.
 | ||||
| +     * http://www.info-zip.org/phpBB3/viewtopic.php?f=7&t=450
 | ||||
| +     */
 | ||||
| +    eb_compr_method = makeword( eb + (EB_HEADSIZE + compr_offset));
 | ||||
| +    if ((eb_compr_method == STORED) && (eb_size - compr_offset != eb_ucsize))
 | ||||
| +        return PK_ERR;
 | ||||
| +    method = makeword(eb + (EB_HEADSIZE + compr_offset));
 | ||||
| +    if ((method == STORED) && (eb_size != compr_offset + EB_CMPRHEADLEN + eb_ucsize))
 | ||||
| +        return PK_ERR;            /* compressed & uncompressed
 | ||||
| +                                   * should match in STORED
 | ||||
| +                                   * method */
 | ||||
| +
 | ||||
|      if ( | ||||
|  #ifdef INT_16BIT | ||||
|  |  | |||
							
								
								
									
										16
									
								
								gnu/packages/patches/unzip-attribs-overflow.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								gnu/packages/patches/unzip-attribs-overflow.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | |||
| Copied from Fedora. | ||||
| 
 | ||||
| http://pkgs.fedoraproject.org/cgit/unzip.git/plain/unzip-6.0-attribs-overflow.patch?id=d18f821e | ||||
| 
 | ||||
| diff -up unzip60/zipinfo.c.attribs-overflow unzip60/zipinfo.c
 | ||||
| --- unzip60/zipinfo.c.attribs-overflow	2009-11-30 09:55:39.000000000 +0100
 | ||||
| +++ unzip60/zipinfo.c	2009-11-30 09:56:42.844263244 +0100
 | ||||
| @@ -1881,7 +1881,7 @@ static int zi_short(__G)   /* return PK-
 | ||||
|  #endif | ||||
|      int         k, error, error_in_archive=PK_COOL; | ||||
|      unsigned    hostnum, hostver, methid, methnum, xattr; | ||||
| -    char        *p, workspace[12], attribs[16];
 | ||||
| +    char        *p, workspace[12], attribs[17];
 | ||||
|      char        methbuf[5]; | ||||
|      static ZCONST char dtype[5]="NXFS"; /* normal, maximum, fast, superfast */ | ||||
|      static ZCONST char Far os[NUM_HOSTS+1][4] = { | ||||
							
								
								
									
										108
									
								
								gnu/packages/patches/unzip-fix-overflows-and-infloop.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										108
									
								
								gnu/packages/patches/unzip-fix-overflows-and-infloop.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,108 @@ | |||
| Copied from Fedora. | ||||
| 
 | ||||
| http://pkgs.fedoraproject.org/cgit/unzip.git/tree/unzip-6.0-heap-overflow-infloop.patch?id=d18f821e | ||||
| 
 | ||||
| From bdd4a0cecd745cb4825e4508b5bdf2579731086a Mon Sep 17 00:00:00 2001 | ||||
| From: Petr Stodulka <pstodulk@redhat.com> | ||||
| Date: Mon, 14 Sep 2015 18:23:17 +0200 | ||||
| Subject: [PATCH 1/3] upstream fix for heap overflow | ||||
| 
 | ||||
| https://bugzilla.redhat.com/attachment.cgi?id=1073002 | ||||
| ---
 | ||||
|  crypt.c | 12 +++++++++++- | ||||
|  1 file changed, 11 insertions(+), 1 deletion(-) | ||||
| 
 | ||||
| diff --git a/crypt.c b/crypt.c
 | ||||
| index 784e411..a8975f2 100644
 | ||||
| --- a/crypt.c
 | ||||
| +++ b/crypt.c
 | ||||
| @@ -465,7 +465,17 @@ int decrypt(__G__ passwrd)
 | ||||
|      GLOBAL(pInfo->encrypted) = FALSE; | ||||
|      defer_leftover_input(__G); | ||||
|      for (n = 0; n < RAND_HEAD_LEN; n++) { | ||||
| -        b = NEXTBYTE;
 | ||||
| +        /* 2012-11-23 SMS.  (OUSPG report.)
 | ||||
| +         * Quit early if compressed size < HEAD_LEN.  The resulting
 | ||||
| +         * error message ("unable to get password") could be improved,
 | ||||
| +         * but it's better than trying to read nonexistent data, and
 | ||||
| +         * then continuing with a negative G.csize.  (See
 | ||||
| +         * fileio.c:readbyte()).
 | ||||
| +         */
 | ||||
| +        if ((b = NEXTBYTE) == (ush)EOF)
 | ||||
| +        {
 | ||||
| +            return PK_ERR;
 | ||||
| +        }
 | ||||
|          h[n] = (uch)b; | ||||
|          Trace((stdout, " (%02x)", h[n])); | ||||
|      } | ||||
| -- 
 | ||||
| 2.4.6 | ||||
| 
 | ||||
| 
 | ||||
| From 4b48844661ff9569f2ecf582a387d46a5775b5d8 Mon Sep 17 00:00:00 2001 | ||||
| From: Kamil Dudka <kdudka@redhat.com> | ||||
| Date: Mon, 14 Sep 2015 18:24:56 +0200 | ||||
| Subject: [PATCH 2/3] fix infinite loop when extracting empty bzip2 data | ||||
| 
 | ||||
| Bug: https://sourceforge.net/p/infozip/patches/23/ | ||||
| ---
 | ||||
|  extract.c | 6 ++++++ | ||||
|  1 file changed, 6 insertions(+) | ||||
| 
 | ||||
| diff --git a/extract.c b/extract.c
 | ||||
| index 7134bfe..29db027 100644
 | ||||
| --- a/extract.c
 | ||||
| +++ b/extract.c
 | ||||
| @@ -2733,6 +2733,12 @@ __GDEF
 | ||||
|      int repeated_buf_err; | ||||
|      bz_stream bstrm; | ||||
|   | ||||
| +    if (G.incnt <= 0 && G.csize <= 0L) {
 | ||||
| +        /* avoid an infinite loop */
 | ||||
| +        Trace((stderr, "UZbunzip2() got empty input\n"));
 | ||||
| +        return 2;
 | ||||
| +    }
 | ||||
| +
 | ||||
|  #if (defined(DLL) && !defined(NO_SLIDE_REDIR)) | ||||
|      if (G.redirect_slide) | ||||
|          wsize = G.redirect_size, redirSlide = G.redirect_buffer; | ||||
| -- 
 | ||||
| 2.4.6 | ||||
| 
 | ||||
| 
 | ||||
| From bd150334fb4084f5555a6be26b015a0671cb5b74 Mon Sep 17 00:00:00 2001 | ||||
| From: Kamil Dudka <kdudka@redhat.com> | ||||
| Date: Tue, 22 Sep 2015 18:52:23 +0200 | ||||
| Subject: [PATCH 3/3] extract: prevent unsigned overflow on invalid input | ||||
| 
 | ||||
| Suggested-by: Stefan Cornelius | ||||
| ---
 | ||||
|  extract.c | 11 ++++++++++- | ||||
|  1 file changed, 10 insertions(+), 1 deletion(-) | ||||
| 
 | ||||
| diff --git a/extract.c b/extract.c
 | ||||
| index 29db027..b9ae667 100644
 | ||||
| --- a/extract.c
 | ||||
| +++ b/extract.c
 | ||||
| @@ -1257,8 +1257,17 @@ static int extract_or_test_entrylist(__G__ numchunk,
 | ||||
|          if (G.lrec.compression_method == STORED) { | ||||
|              zusz_t csiz_decrypted = G.lrec.csize; | ||||
|   | ||||
| -            if (G.pInfo->encrypted)
 | ||||
| +            if (G.pInfo->encrypted) {
 | ||||
| +                if (csiz_decrypted <= 12) {
 | ||||
| +                    /* handle the error now to prevent unsigned overflow */
 | ||||
| +                    Info(slide, 0x401, ((char *)slide,
 | ||||
| +                      LoadFarStringSmall(ErrUnzipNoFile),
 | ||||
| +                      LoadFarString(InvalidComprData),
 | ||||
| +                      LoadFarStringSmall2(Inflate)));
 | ||||
| +                    return PK_ERR;
 | ||||
| +                }
 | ||||
|                  csiz_decrypted -= 12; | ||||
| +            }
 | ||||
|              if (G.lrec.ucsize != csiz_decrypted) { | ||||
|                  Info(slide, 0x401, ((char *)slide, | ||||
|                    LoadFarStringSmall2(WrnStorUCSizCSizDiff), | ||||
| -- 
 | ||||
| 2.5.2 | ||||
| 
 | ||||
							
								
								
									
										94
									
								
								gnu/packages/patches/unzip-format-secure.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								gnu/packages/patches/unzip-format-secure.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,94 @@ | |||
| Copied from Fedora. | ||||
| 
 | ||||
| http://pkgs.fedoraproject.org/cgit/unzip.git/plain/unzip-6.0-format-secure.patch?id=d18f821e | ||||
| 
 | ||||
| diff --git a/extract.c b/extract.c
 | ||||
| index eeb2f57..a0a4929 100644
 | ||||
| --- a/extract.c
 | ||||
| +++ b/extract.c
 | ||||
| @@ -472,8 +472,8 @@ int extract_or_test_files(__G)    /* return PK-type error code */
 | ||||
|                       */ | ||||
|                      Info(slide, 0x401, ((char *)slide, | ||||
|                        LoadFarString(CentSigMsg), j + blknum*DIR_BLKSIZ + 1)); | ||||
| -                    Info(slide, 0x401, ((char *)slide,
 | ||||
| -                      LoadFarString(ReportMsg)));
 | ||||
| +                    Info(slide, 0x401,
 | ||||
| +                         ((char *)slide,"%s", LoadFarString(ReportMsg)));
 | ||||
|                      error_in_archive = PK_BADERR; | ||||
|                  } | ||||
|                  reached_end = TRUE;     /* ...so no more left to do */ | ||||
| @@ -752,8 +752,8 @@ int extract_or_test_files(__G)    /* return PK-type error code */
 | ||||
|   | ||||
|  #ifndef SFX | ||||
|      if (no_endsig_found) {                      /* just to make sure */ | ||||
| -        Info(slide, 0x401, ((char *)slide, LoadFarString(EndSigMsg)));
 | ||||
| -        Info(slide, 0x401, ((char *)slide, LoadFarString(ReportMsg)));
 | ||||
| +        Info(slide, 0x401, ((char *)slide,"%s", LoadFarString(EndSigMsg)));
 | ||||
| +        Info(slide, 0x401, ((char *)slide,"%s", LoadFarString(ReportMsg)));
 | ||||
|          if (!error_in_archive)       /* don't overwrite stronger error */ | ||||
|              error_in_archive = PK_WARN; | ||||
|      } | ||||
| diff --git a/list.c b/list.c
 | ||||
| index 15e0011..f7359c3 100644
 | ||||
| --- a/list.c
 | ||||
| +++ b/list.c
 | ||||
| @@ -181,7 +181,7 @@ int list_files(__G)    /* return PK-type error code */
 | ||||
|                  Info(slide, 0x401, | ||||
|                       ((char *)slide, LoadFarString(CentSigMsg), j)); | ||||
|                  Info(slide, 0x401, | ||||
| -                     ((char *)slide, LoadFarString(ReportMsg)));
 | ||||
| +                     ((char *)slide,"%s", LoadFarString(ReportMsg)));
 | ||||
|                  return PK_BADERR;   /* sig not found */ | ||||
|              } | ||||
|          } | ||||
| @@ -507,7 +507,8 @@ int list_files(__G)    /* return PK-type error code */
 | ||||
|              && (!G.ecrec.is_zip64_archive) | ||||
|              && (memcmp(G.sig, end_central_sig, 4) != 0) | ||||
|             ) {          /* just to make sure again */ | ||||
| -            Info(slide, 0x401, ((char *)slide, LoadFarString(EndSigMsg)));
 | ||||
| +            Info(slide, 0x401, 
 | ||||
| +                 ((char *)slide,"%s", LoadFarString(EndSigMsg)));
 | ||||
|              error_in_archive = PK_WARN;   /* didn't find sig */ | ||||
|          } | ||||
|   | ||||
| @@ -591,7 +592,7 @@ int get_time_stamp(__G__ last_modtime, nmember)  /* return PK-type error code */
 | ||||
|                  Info(slide, 0x401, | ||||
|                       ((char *)slide, LoadFarString(CentSigMsg), j)); | ||||
|                  Info(slide, 0x401, | ||||
| -                     ((char *)slide, LoadFarString(ReportMsg)));
 | ||||
| +                     ((char *)slide,"%s", LoadFarString(ReportMsg)));
 | ||||
|                  return PK_BADERR;   /* sig not found */ | ||||
|              } | ||||
|          } | ||||
| @@ -674,7 +675,7 @@ int get_time_stamp(__G__ last_modtime, nmember)  /* return PK-type error code */
 | ||||
|    ---------------------------------------------------------------------------*/ | ||||
|   | ||||
|      if (memcmp(G.sig, end_central_sig, 4)) {    /* just to make sure again */ | ||||
| -        Info(slide, 0x401, ((char *)slide, LoadFarString(EndSigMsg)));
 | ||||
| +        Info(slide, 0x401, ((char *)slide,"%s", LoadFarString(EndSigMsg)));
 | ||||
|          error_in_archive = PK_WARN; | ||||
|      } | ||||
|      if (*nmember == 0L && error_in_archive <= PK_WARN) | ||||
| diff --git a/zipinfo.c b/zipinfo.c
 | ||||
| index 6e22cc8..ac5c61b 100644
 | ||||
| --- a/zipinfo.c
 | ||||
| +++ b/zipinfo.c
 | ||||
| @@ -771,7 +771,7 @@ int zipinfo(__G)   /* return PK-type error code */
 | ||||
|                  Info(slide, 0x401, | ||||
|                       ((char *)slide, LoadFarString(CentSigMsg), j)); | ||||
|                  Info(slide, 0x401, | ||||
| -                     ((char *)slide, LoadFarString(ReportMsg)));
 | ||||
| +                     ((char *)slide,"%s", LoadFarString(ReportMsg)));
 | ||||
|                  error_in_archive = PK_BADERR;   /* sig not found */ | ||||
|                  break; | ||||
|              } | ||||
| @@ -960,7 +960,8 @@ int zipinfo(__G)   /* return PK-type error code */
 | ||||
|              && (!G.ecrec.is_zip64_archive) | ||||
|              && (memcmp(G.sig, end_central_sig, 4) != 0) | ||||
|             ) {          /* just to make sure again */ | ||||
| -            Info(slide, 0x401, ((char *)slide, LoadFarString(EndSigMsg)));
 | ||||
| +            Info(slide, 0x401, 
 | ||||
| +                 ((char *)slide,"%s", LoadFarString(EndSigMsg)));
 | ||||
|              error_in_archive = PK_WARN;   /* didn't find sig */ | ||||
|          } | ||||
|   | ||||
|  | @ -1,18 +0,0 @@ | |||
| Copied from Debian. | ||||
| 
 | ||||
| From: sms | ||||
| Subject: Increase size of cfactorstr array to avoid buffer overflow | ||||
| Bug-Debian: http://bugs.debian.org/741384 | ||||
| X-Debian-version: 6.0-11 | ||||
| 
 | ||||
| --- a/list.c
 | ||||
| +++ b/list.c
 | ||||
| @@ -97,7 +97,7 @@
 | ||||
|  { | ||||
|      int do_this_file=FALSE, cfactor, error, error_in_archive=PK_COOL; | ||||
|  #ifndef WINDLL | ||||
| -    char sgn, cfactorstr[10];
 | ||||
| +    char sgn, cfactorstr[12];
 | ||||
|      int longhdr=(uO.vflag>1); | ||||
|  #endif | ||||
|      int date_format; | ||||
							
								
								
									
										38
									
								
								gnu/packages/patches/unzip-overflow-long-fsize.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								gnu/packages/patches/unzip-overflow-long-fsize.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,38 @@ | |||
| Copied from Fedora. | ||||
| 
 | ||||
| http://pkgs.fedoraproject.org/cgit/unzip.git/plain/unzip-6.0-overflow-long-fsize.patch?id=d18f821e | ||||
| 
 | ||||
| diff --git a/list.c b/list.c
 | ||||
| index f7359c3..4c3d703 100644
 | ||||
| --- a/list.c
 | ||||
| +++ b/list.c
 | ||||
| @@ -97,7 +97,7 @@ int list_files(__G)    /* return PK-type error code */
 | ||||
|  { | ||||
|      int do_this_file=FALSE, cfactor, error, error_in_archive=PK_COOL; | ||||
|  #ifndef WINDLL | ||||
| -    char sgn, cfactorstr[10];
 | ||||
| +    char sgn, cfactorstr[13];
 | ||||
|      int longhdr=(uO.vflag>1); | ||||
|  #endif | ||||
|      int date_format; | ||||
| @@ -339,7 +339,19 @@ int list_files(__G)    /* return PK-type error code */
 | ||||
|                  G.crec.compression_method == ENHDEFLATED) { | ||||
|                  methbuf[5] = dtype[(G.crec.general_purpose_bit_flag>>1) & 3]; | ||||
|              } else if (methnum >= NUM_METHODS) { | ||||
| -                sprintf(&methbuf[4], "%03u", G.crec.compression_method);
 | ||||
| +                /* 2013-02-26 SMS.
 | ||||
| +                 * http://sourceforge.net/tracker/?func=detail
 | ||||
| +                 *  &aid=2861648&group_id=118012&atid=679786
 | ||||
| +                 * Unexpectedly large compression methods overflow
 | ||||
| +                 * &methbuf[].  Use the old, three-digit decimal format
 | ||||
| +                 * for values which fit.  Otherwise, sacrifice the
 | ||||
| +                 * colon, and use four-digit hexadecimal.
 | ||||
| +                 */
 | ||||
| +                if (G.crec.compression_method <= 999) {
 | ||||
| +                    sprintf( &methbuf[ 4], "%03u", G.crec.compression_method);
 | ||||
| +                } else {
 | ||||
| +                    sprintf( &methbuf[ 3], "%04X", G.crec.compression_method);
 | ||||
| +                }
 | ||||
|              } | ||||
|   | ||||
|  #if 0       /* GRR/Euro:  add this? */ | ||||
|  | @ -1,51 +0,0 @@ | |||
| Patch copied from http://w1.fi/security/2015-2/ | ||||
| 
 | ||||
| From 5acd23f4581da58683f3cf5e36cb71bbe4070bd7 Mon Sep 17 00:00:00 2001 | ||||
| From: Jouni Malinen <j@w1.fi> | ||||
| Date: Tue, 28 Apr 2015 17:08:33 +0300 | ||||
| Subject: [PATCH] WPS: Fix HTTP chunked transfer encoding parser | ||||
| 
 | ||||
| strtoul() return value may end up overflowing the int h->chunk_size and | ||||
| resulting in a negative value to be stored as the chunk_size. This could | ||||
| result in the following memcpy operation using a very large length | ||||
| argument which would result in a buffer overflow and segmentation fault. | ||||
| 
 | ||||
| This could have been used to cause a denial service by any device that | ||||
| has been authorized for network access (either wireless or wired). This | ||||
| would affect both the WPS UPnP functionality in a WPS AP (hostapd with | ||||
| upnp_iface parameter set in the configuration) and WPS ER | ||||
| (wpa_supplicant with WPS_ER_START control interface command used). | ||||
| 
 | ||||
| Validate the parsed chunk length value to avoid this. In addition to | ||||
| rejecting negative values, we can also reject chunk size that would be | ||||
| larger than the maximum configured body length. | ||||
| 
 | ||||
| Thanks to Kostya Kortchinsky of Google security team for discovering and | ||||
| reporting this issue. | ||||
| 
 | ||||
| Signed-off-by: Jouni Malinen <j@w1.fi> | ||||
| ---
 | ||||
|  src/wps/httpread.c | 7 +++++++ | ||||
|  1 file changed, 7 insertions(+) | ||||
| 
 | ||||
| diff --git a/src/wps/httpread.c b/src/wps/httpread.c
 | ||||
| index 2f08f37..d2855e3 100644
 | ||||
| --- a/src/wps/httpread.c
 | ||||
| +++ b/src/wps/httpread.c
 | ||||
| @@ -533,6 +533,13 @@ static void httpread_read_handler(int sd, void *eloop_ctx, void *sock_ctx)
 | ||||
|  					if (!isxdigit(*cbp)) | ||||
|  						goto bad; | ||||
|  					h->chunk_size = strtoul(cbp, NULL, 16); | ||||
| +					if (h->chunk_size < 0 ||
 | ||||
| +					    h->chunk_size > h->max_bytes) {
 | ||||
| +						wpa_printf(MSG_DEBUG,
 | ||||
| +							   "httpread: Invalid chunk size %d",
 | ||||
| +							   h->chunk_size);
 | ||||
| +						goto bad;
 | ||||
| +					}
 | ||||
|  					/* throw away chunk header | ||||
|  					 * so we have only real data | ||||
|  					 */ | ||||
| -- 
 | ||||
| 1.9.1 | ||||
| 
 | ||||
|  | @ -1,43 +0,0 @@ | |||
| Patch copied from http://w1.fi/security/2015-3/ | ||||
| 
 | ||||
| From ef566a4d4f74022e1fdb0a2addfe81e6de9f4aae Mon Sep 17 00:00:00 2001 | ||||
| From: Jouni Malinen <j@w1.fi> | ||||
| Date: Wed, 29 Apr 2015 02:21:53 +0300 | ||||
| Subject: [PATCH] AP WMM: Fix integer underflow in WMM Action frame parser | ||||
| 
 | ||||
| The length of the WMM Action frame was not properly validated and the | ||||
| length of the information elements (int left) could end up being | ||||
| negative. This would result in reading significantly past the stack | ||||
| buffer while parsing the IEs in ieee802_11_parse_elems() and while doing | ||||
| so, resulting in segmentation fault. | ||||
| 
 | ||||
| This can result in an invalid frame being used for a denial of service | ||||
| attack (hostapd process killed) against an AP with a driver that uses | ||||
| hostapd for management frame processing (e.g., all mac80211-based | ||||
| drivers). | ||||
| 
 | ||||
| Thanks to Kostya Kortchinsky of Google security team for discovering and | ||||
| reporting this issue. | ||||
| 
 | ||||
| Signed-off-by: Jouni Malinen <j@w1.fi> | ||||
| ---
 | ||||
|  src/ap/wmm.c | 3 +++ | ||||
|  1 file changed, 3 insertions(+) | ||||
| 
 | ||||
| diff --git a/src/ap/wmm.c b/src/ap/wmm.c
 | ||||
| index 6d4177c..314e244 100644
 | ||||
| --- a/src/ap/wmm.c
 | ||||
| +++ b/src/ap/wmm.c
 | ||||
| @@ -274,6 +274,9 @@ void hostapd_wmm_action(struct hostapd_data *hapd,
 | ||||
|  		return; | ||||
|  	} | ||||
|   | ||||
| +	if (left < 0)
 | ||||
| +		return; /* not a valid WMM Action frame */
 | ||||
| +
 | ||||
|  	/* extract the tspec info element */ | ||||
|  	if (ieee802_11_parse_elems(pos, left, &elems, 1) == ParseFailed) { | ||||
|  		hostapd_logger(hapd, mgmt->sa, HOSTAPD_MODULE_IEEE80211, | ||||
| -- 
 | ||||
| 1.9.1 | ||||
| 
 | ||||
|  | @ -1,75 +0,0 @@ | |||
| Patch copied from http://w1.fi/security/2015-4/ | ||||
| 
 | ||||
| From dd2f043c9c43d156494e33d7ce22db96e6ef42c7 Mon Sep 17 00:00:00 2001 | ||||
| From: Jouni Malinen <j@w1.fi> | ||||
| Date: Fri, 1 May 2015 16:37:45 +0300 | ||||
| Subject: [PATCH 1/5] EAP-pwd peer: Fix payload length validation for Commit | ||||
|  and Confirm | ||||
| 
 | ||||
| The length of the received Commit and Confirm message payloads was not | ||||
| checked before reading them. This could result in a buffer read | ||||
| overflow when processing an invalid message. | ||||
| 
 | ||||
| Fix this by verifying that the payload is of expected length before | ||||
| processing it. In addition, enforce correct state transition sequence to | ||||
| make sure there is no unexpected behavior if receiving a Commit/Confirm | ||||
| message before the previous exchanges have been completed. | ||||
| 
 | ||||
| Thanks to Kostya Kortchinsky of Google security team for discovering and | ||||
| reporting this issue. | ||||
| 
 | ||||
| Signed-off-by: Jouni Malinen <j@w1.fi> | ||||
| ---
 | ||||
|  src/eap_peer/eap_pwd.c | 29 +++++++++++++++++++++++++++++ | ||||
|  1 file changed, 29 insertions(+) | ||||
| 
 | ||||
| diff --git a/src/eap_peer/eap_pwd.c b/src/eap_peer/eap_pwd.c
 | ||||
| index f2b0926..a629437 100644
 | ||||
| --- a/src/eap_peer/eap_pwd.c
 | ||||
| +++ b/src/eap_peer/eap_pwd.c
 | ||||
| @@ -355,6 +355,23 @@ eap_pwd_perform_commit_exchange(struct eap_sm *sm, struct eap_pwd_data *data,
 | ||||
|  	BIGNUM *mask = NULL, *x = NULL, *y = NULL, *cofactor = NULL; | ||||
|  	u16 offset; | ||||
|  	u8 *ptr, *scalar = NULL, *element = NULL; | ||||
| +	size_t prime_len, order_len;
 | ||||
| +
 | ||||
| +	if (data->state != PWD_Commit_Req) {
 | ||||
| +		ret->ignore = TRUE;
 | ||||
| +		goto fin;
 | ||||
| +	}
 | ||||
| +
 | ||||
| +	prime_len = BN_num_bytes(data->grp->prime);
 | ||||
| +	order_len = BN_num_bytes(data->grp->order);
 | ||||
| +
 | ||||
| +	if (payload_len != 2 * prime_len + order_len) {
 | ||||
| +		wpa_printf(MSG_INFO,
 | ||||
| +			   "EAP-pwd: Unexpected Commit payload length %u (expected %u)",
 | ||||
| +			   (unsigned int) payload_len,
 | ||||
| +			   (unsigned int) (2 * prime_len + order_len));
 | ||||
| +		goto fin;
 | ||||
| +	}
 | ||||
|   | ||||
|  	if (((data->private_value = BN_new()) == NULL) || | ||||
|  	    ((data->my_element = EC_POINT_new(data->grp->group)) == NULL) || | ||||
| @@ -554,6 +571,18 @@ eap_pwd_perform_confirm_exchange(struct eap_sm *sm, struct eap_pwd_data *data,
 | ||||
|  	u8 conf[SHA256_MAC_LEN], *cruft = NULL, *ptr; | ||||
|  	int offset; | ||||
|   | ||||
| +	if (data->state != PWD_Confirm_Req) {
 | ||||
| +		ret->ignore = TRUE;
 | ||||
| +		goto fin;
 | ||||
| +	}
 | ||||
| +
 | ||||
| +	if (payload_len != SHA256_MAC_LEN) {
 | ||||
| +		wpa_printf(MSG_INFO,
 | ||||
| +			   "EAP-pwd: Unexpected Confirm payload length %u (expected %u)",
 | ||||
| +			   (unsigned int) payload_len, SHA256_MAC_LEN);
 | ||||
| +		goto fin;
 | ||||
| +	}
 | ||||
| +
 | ||||
|  	/* | ||||
|  	 * first build up the ciphersuite which is group | random_function | | ||||
|  	 *	prf | ||||
| -- 
 | ||||
| 1.9.1 | ||||
| 
 | ||||
|  | @ -1,68 +0,0 @@ | |||
| Patch copied from http://w1.fi/security/2015-4/ | ||||
| 
 | ||||
| From e28a58be26184c2a23f80b410e0997ef1bd5d578 Mon Sep 17 00:00:00 2001 | ||||
| From: Jouni Malinen <j@w1.fi> | ||||
| Date: Fri, 1 May 2015 16:40:44 +0300 | ||||
| Subject: [PATCH 2/5] EAP-pwd server: Fix payload length validation for Commit | ||||
|  and Confirm | ||||
| 
 | ||||
| The length of the received Commit and Confirm message payloads was not | ||||
| checked before reading them. This could result in a buffer read | ||||
| overflow when processing an invalid message. | ||||
| 
 | ||||
| Fix this by verifying that the payload is of expected length before | ||||
| processing it. In addition, enforce correct state transition sequence to | ||||
| make sure there is no unexpected behavior if receiving a Commit/Confirm | ||||
| message before the previous exchanges have been completed. | ||||
| 
 | ||||
| Thanks to Kostya Kortchinsky of Google security team for discovering and | ||||
| reporting this issue. | ||||
| 
 | ||||
| Signed-off-by: Jouni Malinen <j@w1.fi> | ||||
| ---
 | ||||
|  src/eap_server/eap_server_pwd.c | 19 +++++++++++++++++++ | ||||
|  1 file changed, 19 insertions(+) | ||||
| 
 | ||||
| diff --git a/src/eap_server/eap_server_pwd.c b/src/eap_server/eap_server_pwd.c
 | ||||
| index 66bd5d2..3189105 100644
 | ||||
| --- a/src/eap_server/eap_server_pwd.c
 | ||||
| +++ b/src/eap_server/eap_server_pwd.c
 | ||||
| @@ -656,9 +656,21 @@ eap_pwd_process_commit_resp(struct eap_sm *sm, struct eap_pwd_data *data,
 | ||||
|  	BIGNUM *x = NULL, *y = NULL, *cofactor = NULL; | ||||
|  	EC_POINT *K = NULL, *point = NULL; | ||||
|  	int res = 0; | ||||
| +	size_t prime_len, order_len;
 | ||||
|   | ||||
|  	wpa_printf(MSG_DEBUG, "EAP-pwd: Received commit response"); | ||||
|   | ||||
| +	prime_len = BN_num_bytes(data->grp->prime);
 | ||||
| +	order_len = BN_num_bytes(data->grp->order);
 | ||||
| +
 | ||||
| +	if (payload_len != 2 * prime_len + order_len) {
 | ||||
| +		wpa_printf(MSG_INFO,
 | ||||
| +			   "EAP-pwd: Unexpected Commit payload length %u (expected %u)",
 | ||||
| +			   (unsigned int) payload_len,
 | ||||
| +			   (unsigned int) (2 * prime_len + order_len));
 | ||||
| +		goto fin;
 | ||||
| +	}
 | ||||
| +
 | ||||
|  	if (((data->peer_scalar = BN_new()) == NULL) || | ||||
|  	    ((data->k = BN_new()) == NULL) || | ||||
|  	    ((cofactor = BN_new()) == NULL) || | ||||
| @@ -774,6 +786,13 @@ eap_pwd_process_confirm_resp(struct eap_sm *sm, struct eap_pwd_data *data,
 | ||||
|  	u8 conf[SHA256_MAC_LEN], *cruft = NULL, *ptr; | ||||
|  	int offset; | ||||
|   | ||||
| +	if (payload_len != SHA256_MAC_LEN) {
 | ||||
| +		wpa_printf(MSG_INFO,
 | ||||
| +			   "EAP-pwd: Unexpected Confirm payload length %u (expected %u)",
 | ||||
| +			   (unsigned int) payload_len, SHA256_MAC_LEN);
 | ||||
| +		goto fin;
 | ||||
| +	}
 | ||||
| +
 | ||||
|  	/* build up the ciphersuite: group | random_function | prf */ | ||||
|  	grp = htons(data->group_num); | ||||
|  	ptr = (u8 *) &cs; | ||||
| -- 
 | ||||
| 1.9.1 | ||||
| 
 | ||||
|  | @ -1,54 +0,0 @@ | |||
| Patch copied from http://w1.fi/security/2015-4/ | ||||
| 
 | ||||
| From 477c74395acd0123340457ba6f15ab345d42016e Mon Sep 17 00:00:00 2001 | ||||
| From: Jouni Malinen <j@w1.fi> | ||||
| Date: Sat, 2 May 2015 19:23:04 +0300 | ||||
| Subject: [PATCH 3/5] EAP-pwd peer: Fix Total-Length parsing for fragment | ||||
|  reassembly | ||||
| 
 | ||||
| The remaining number of bytes in the message could be smaller than the | ||||
| Total-Length field size, so the length needs to be explicitly checked | ||||
| prior to reading the field and decrementing the len variable. This could | ||||
| have resulted in the remaining length becoming negative and interpreted | ||||
| as a huge positive integer. | ||||
| 
 | ||||
| In addition, check that there is no already started fragment in progress | ||||
| before allocating a new buffer for reassembling fragments. This avoid a | ||||
| potential memory leak when processing invalid message. | ||||
| 
 | ||||
| Signed-off-by: Jouni Malinen <j@w1.fi> | ||||
| ---
 | ||||
|  src/eap_peer/eap_pwd.c | 12 ++++++++++++ | ||||
|  1 file changed, 12 insertions(+) | ||||
| 
 | ||||
| diff --git a/src/eap_peer/eap_pwd.c b/src/eap_peer/eap_pwd.c
 | ||||
| index a629437..1d2079b 100644
 | ||||
| --- a/src/eap_peer/eap_pwd.c
 | ||||
| +++ b/src/eap_peer/eap_pwd.c
 | ||||
| @@ -866,11 +866,23 @@ eap_pwd_process(struct eap_sm *sm, void *priv, struct eap_method_ret *ret,
 | ||||
|  	 * if it's the first fragment there'll be a length field | ||||
|  	 */ | ||||
|  	if (EAP_PWD_GET_LENGTH_BIT(lm_exch)) { | ||||
| +		if (len < 2) {
 | ||||
| +			wpa_printf(MSG_DEBUG,
 | ||||
| +				   "EAP-pwd: Frame too short to contain Total-Length field");
 | ||||
| +			ret->ignore = TRUE;
 | ||||
| +			return NULL;
 | ||||
| +		}
 | ||||
|  		tot_len = WPA_GET_BE16(pos); | ||||
|  		wpa_printf(MSG_DEBUG, "EAP-pwd: Incoming fragments whose " | ||||
|  			   "total length = %d", tot_len); | ||||
|  		if (tot_len > 15000) | ||||
|  			return NULL; | ||||
| +		if (data->inbuf) {
 | ||||
| +			wpa_printf(MSG_DEBUG,
 | ||||
| +				   "EAP-pwd: Unexpected new fragment start when previous fragment is still in use");
 | ||||
| +			ret->ignore = TRUE;
 | ||||
| +			return NULL;
 | ||||
| +		}
 | ||||
|  		data->inbuf = wpabuf_alloc(tot_len); | ||||
|  		if (data->inbuf == NULL) { | ||||
|  			wpa_printf(MSG_INFO, "Out of memory to buffer " | ||||
| -- 
 | ||||
| 1.9.1 | ||||
| 
 | ||||
|  | @ -1,52 +0,0 @@ | |||
| Patch copied from http://w1.fi/security/2015-4/ | ||||
| 
 | ||||
| From 3035cc2894e08319b905bd6561e8bddc8c2db9fa Mon Sep 17 00:00:00 2001 | ||||
| From: Jouni Malinen <j@w1.fi> | ||||
| Date: Sat, 2 May 2015 19:26:06 +0300 | ||||
| Subject: [PATCH 4/5] EAP-pwd server: Fix Total-Length parsing for fragment | ||||
|  reassembly | ||||
| 
 | ||||
| The remaining number of bytes in the message could be smaller than the | ||||
| Total-Length field size, so the length needs to be explicitly checked | ||||
| prior to reading the field and decrementing the len variable. This could | ||||
| have resulted in the remaining length becoming negative and interpreted | ||||
| as a huge positive integer. | ||||
| 
 | ||||
| In addition, check that there is no already started fragment in progress | ||||
| before allocating a new buffer for reassembling fragments. This avoid a | ||||
| potential memory leak when processing invalid message. | ||||
| 
 | ||||
| Signed-off-by: Jouni Malinen <j@w1.fi> | ||||
| ---
 | ||||
|  src/eap_server/eap_server_pwd.c | 10 ++++++++++ | ||||
|  1 file changed, 10 insertions(+) | ||||
| 
 | ||||
| diff --git a/src/eap_server/eap_server_pwd.c b/src/eap_server/eap_server_pwd.c
 | ||||
| index 3189105..2bfc3c2 100644
 | ||||
| --- a/src/eap_server/eap_server_pwd.c
 | ||||
| +++ b/src/eap_server/eap_server_pwd.c
 | ||||
| @@ -942,11 +942,21 @@ static void eap_pwd_process(struct eap_sm *sm, void *priv,
 | ||||
|  	 * the first fragment has a total length | ||||
|  	 */ | ||||
|  	if (EAP_PWD_GET_LENGTH_BIT(lm_exch)) { | ||||
| +		if (len < 2) {
 | ||||
| +			wpa_printf(MSG_DEBUG,
 | ||||
| +				   "EAP-pwd: Frame too short to contain Total-Length field");
 | ||||
| +			return;
 | ||||
| +		}
 | ||||
|  		tot_len = WPA_GET_BE16(pos); | ||||
|  		wpa_printf(MSG_DEBUG, "EAP-pwd: Incoming fragments, total " | ||||
|  			   "length = %d", tot_len); | ||||
|  		if (tot_len > 15000) | ||||
|  			return; | ||||
| +		if (data->inbuf) {
 | ||||
| +			wpa_printf(MSG_DEBUG,
 | ||||
| +				   "EAP-pwd: Unexpected new fragment start when previous fragment is still in use");
 | ||||
| +			return;
 | ||||
| +		}
 | ||||
|  		data->inbuf = wpabuf_alloc(tot_len); | ||||
|  		if (data->inbuf == NULL) { | ||||
|  			wpa_printf(MSG_INFO, "EAP-pwd: Out of memory to " | ||||
| -- 
 | ||||
| 1.9.1 | ||||
| 
 | ||||
|  | @ -1,34 +0,0 @@ | |||
| Patch copied from http://w1.fi/security/2015-4/ | ||||
| 
 | ||||
| From 28a069a545b06b99eb55ad53f63f2c99e65a98f6 Mon Sep 17 00:00:00 2001 | ||||
| From: Jouni Malinen <j@w1.fi> | ||||
| Date: Sat, 2 May 2015 19:26:28 +0300 | ||||
| Subject: [PATCH 5/5] EAP-pwd peer: Fix asymmetric fragmentation behavior | ||||
| 
 | ||||
| The L (Length) and M (More) flags needs to be cleared before deciding | ||||
| whether the locally generated response requires fragmentation. This | ||||
| fixes an issue where these flags from the server could have been invalid | ||||
| for the following message. In some cases, this could have resulted in | ||||
| triggering the wpabuf security check that would terminate the process | ||||
| due to invalid buffer allocation. | ||||
| 
 | ||||
| Signed-off-by: Jouni Malinen <j@w1.fi> | ||||
| ---
 | ||||
|  src/eap_peer/eap_pwd.c | 1 + | ||||
|  1 file changed, 1 insertion(+) | ||||
| 
 | ||||
| diff --git a/src/eap_peer/eap_pwd.c b/src/eap_peer/eap_pwd.c
 | ||||
| index 1d2079b..e58b13a 100644
 | ||||
| --- a/src/eap_peer/eap_pwd.c
 | ||||
| +++ b/src/eap_peer/eap_pwd.c
 | ||||
| @@ -968,6 +968,7 @@ eap_pwd_process(struct eap_sm *sm, void *priv, struct eap_method_ret *ret,
 | ||||
|  	/* | ||||
|  	 * we have output! Do we need to fragment it? | ||||
|  	 */ | ||||
| +	lm_exch = EAP_PWD_GET_EXCHANGE(lm_exch);
 | ||||
|  	len = wpabuf_len(data->outbuf); | ||||
|  	if ((len + EAP_PWD_HDR_SIZE) > data->mtu) { | ||||
|  		resp = eap_msg_alloc(EAP_VENDOR_IETF, EAP_TYPE_PWD, data->mtu, | ||||
| -- 
 | ||||
| 1.9.1 | ||||
| 
 | ||||
|  | @ -1,64 +0,0 @@ | |||
| Original patch copied from http://w1.fi/security/2015-5/ | ||||
| and then backported to wpa-supplicant-2.4. | ||||
| 
 | ||||
| From df9079e72760ceb7ebe7fb11538200c516bdd886 Mon Sep 17 00:00:00 2001 | ||||
| From: Jouni Malinen <j@w1.fi> | ||||
| Date: Tue, 7 Jul 2015 21:57:28 +0300 | ||||
| Subject: [PATCH] NFC: Fix payload length validation in NDEF record parser | ||||
| 
 | ||||
| It was possible for the 32-bit record->total_length value to end up | ||||
| wrapping around due to integer overflow if the longer form of payload | ||||
| length field is used and record->payload_length gets a value close to | ||||
| 2^32. This could result in ndef_parse_record() accepting a too large | ||||
| payload length value and the record type filter reading up to about 20 | ||||
| bytes beyond the end of the buffer and potentially killing the process. | ||||
| This could also result in an attempt to allocate close to 2^32 bytes of | ||||
| heap memory and if that were to succeed, a buffer read overflow of the | ||||
| same length which would most likely result in the process termination. | ||||
| In case of record->total_length ending up getting the value 0, there | ||||
| would be no buffer read overflow, but record parsing would result in an | ||||
| infinite loop in ndef_parse_records(). | ||||
| 
 | ||||
| Any of these error cases could potentially be used for denial of service | ||||
| attacks over NFC by using a malformed NDEF record on an NFC Tag or | ||||
| sending them during NFC connection handover if the application providing | ||||
| the NDEF message to hostapd/wpa_supplicant did no validation of the | ||||
| received records. While such validation is likely done in the NFC stack | ||||
| that needs to parse the NFC messages before further processing, | ||||
| hostapd/wpa_supplicant better be prepared for any data being included | ||||
| here. | ||||
| 
 | ||||
| Fix this by validating record->payload_length value in a way that | ||||
| detects integer overflow. (CID 122668) | ||||
| 
 | ||||
| Signed-off-by: Jouni Malinen <j@w1.fi> | ||||
| ---
 | ||||
|  src/wps/ndef.c | 5 ++++- | ||||
|  1 file changed, 4 insertions(+), 1 deletion(-) | ||||
| 
 | ||||
| diff --git a/src/wps/ndef.c b/src/wps/ndef.c
 | ||||
| index 5604b0a..50d018f 100644
 | ||||
| --- a/src/wps/ndef.c
 | ||||
| +++ b/src/wps/ndef.c
 | ||||
| @@ -48,6 +48,8 @@ static int ndef_parse_record(const u8 *data, u32 size,
 | ||||
|  		if (size < 6) | ||||
|  			return -1; | ||||
|  		record->payload_length = ntohl(*(u32 *)pos); | ||||
| +		if (record->payload_length > size - 6)
 | ||||
| +			return -1;
 | ||||
|  		pos += sizeof(u32); | ||||
|  	} | ||||
|   | ||||
| @@ -68,7 +70,8 @@ static int ndef_parse_record(const u8 *data, u32 size,
 | ||||
|  	pos += record->payload_length; | ||||
|   | ||||
|  	record->total_length = pos - data; | ||||
| -	if (record->total_length > size)
 | ||||
| +	if (record->total_length > size ||
 | ||||
| +	    record->total_length < record->payload_length)
 | ||||
|  		return -1; | ||||
|  	return 0; | ||||
|  } | ||||
| -- 
 | ||||
| 1.9.1 | ||||
| 
 | ||||
|  | @ -1,42 +0,0 @@ | |||
| From 9ed4eee345f85e3025c33c6e20aa25696e341ccd Mon Sep 17 00:00:00 2001 | ||||
| From: Jouni Malinen <jouni@qca.qualcomm.com> | ||||
| Date: Tue, 7 Apr 2015 11:32:11 +0300 | ||||
| Subject: [PATCH] P2P: Validate SSID element length before copying it | ||||
|  (CVE-2015-1863) | ||||
| 
 | ||||
| This fixes a possible memcpy overflow for P2P dev->oper_ssid in | ||||
| p2p_add_device(). The length provided by the peer device (0..255 bytes) | ||||
| was used without proper bounds checking and that could have resulted in | ||||
| arbitrary data of up to 223 bytes being written beyond the end of the | ||||
| dev->oper_ssid[] array (of which about 150 bytes would be beyond the | ||||
| heap allocation) when processing a corrupted management frame for P2P | ||||
| peer discovery purposes. | ||||
| 
 | ||||
| This could result in corrupted state in heap, unexpected program | ||||
| behavior due to corrupted P2P peer device information, denial of service | ||||
| due to process crash, exposure of memory contents during GO Negotiation, | ||||
| and potentially arbitrary code execution. | ||||
| 
 | ||||
| Thanks to Google security team for reporting this issue and smart | ||||
| hardware research group of Alibaba security team for discovering it. | ||||
| 
 | ||||
| Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com> | ||||
| ---
 | ||||
|  src/p2p/p2p.c | 1 + | ||||
|  1 file changed, 1 insertion(+) | ||||
| 
 | ||||
| diff --git a/src/p2p/p2p.c b/src/p2p/p2p.c
 | ||||
| index f584fae..a45fe73 100644
 | ||||
| --- a/src/p2p/p2p.c
 | ||||
| +++ b/src/p2p/p2p.c
 | ||||
| @@ -778,6 +778,7 @@ int p2p_add_device(struct p2p_data *p2p, const u8 *addr, int freq,
 | ||||
|  	if (os_memcmp(addr, p2p_dev_addr, ETH_ALEN) != 0) | ||||
|  		os_memcpy(dev->interface_addr, addr, ETH_ALEN); | ||||
|  	if (msg.ssid && | ||||
| +	    msg.ssid[1] <= sizeof(dev->oper_ssid) &&
 | ||||
|  	    (msg.ssid[1] != P2P_WILDCARD_SSID_LEN || | ||||
|  	     os_memcmp(msg.ssid + 2, P2P_WILDCARD_SSID, P2P_WILDCARD_SSID_LEN) | ||||
|  	     != 0)) { | ||||
| -- 
 | ||||
| 1.9.1 | ||||
| 
 | ||||
|  | @ -631,13 +631,28 @@ and verifies that it matches the intended target hostname.") | |||
|        (base32 | ||||
|         "0q4f9l8grf6pwp64xbv8bmyxx416s7h4522nnxac056ap3savbps")))) | ||||
|     (build-system python-build-system) | ||||
|     (arguments | ||||
|      `(#:tests? #f ; no test target | ||||
|        #:phases | ||||
|        (modify-phases %standard-phases | ||||
|          (add-after 'unpack 'fix-hdf5-paths | ||||
|           (lambda* (#:key inputs #:allow-other-keys) | ||||
|             (let ((prefix (assoc-ref inputs "hdf5"))) | ||||
|               (substitute* "setup_build.py" | ||||
|                 (("\\['/opt/local/lib', '/usr/local/lib'\\]") | ||||
|                  (string-append "['" prefix "/lib" "']")) | ||||
|                 (("'/opt/local/include', '/usr/local/include'") | ||||
|                  (string-append "'" prefix "/include" "'"))) | ||||
|               (substitute* "setup_configure.py" | ||||
|                 (("\\['/usr/local/lib', '/opt/local/lib'\\]") | ||||
|                  (string-append "['" prefix "/lib" "']"))) | ||||
|               #t)))))) | ||||
|     (propagated-inputs | ||||
|      `(("python-numpy" ,python-numpy))) | ||||
|     (inputs | ||||
|      `(("python-cython" ,python-cython) | ||||
|        ("python-numpy" ,python-numpy) | ||||
|        ("hdf5" ,hdf5))) | ||||
|      `(("hdf5" ,hdf5))) | ||||
|     (native-inputs | ||||
|      `(("python-setuptools" ,python-setuptools))) | ||||
|     (arguments `(#:tests? #f)) ; no test target | ||||
|      `(("python-cython" ,python-cython))) | ||||
|     (home-page "http://www.h5py.org/") | ||||
|     (synopsis "Read and write HDF5 files from Python") | ||||
|     (description | ||||
|  | @ -651,11 +666,11 @@ concepts.") | |||
| (define-public python2-h5py | ||||
|   (let ((h5py (package-with-python2 python-h5py))) | ||||
|     (package (inherit h5py) | ||||
|       (inputs | ||||
|       (propagated-inputs | ||||
|        `(("python2-numpy" ,python2-numpy) | ||||
|          ,@(alist-delete | ||||
|             "python-numpy" | ||||
|             (package-inputs h5py))))))) | ||||
|             (package-propagated-inputs h5py))))))) | ||||
| 
 | ||||
| (define-public python-lockfile | ||||
|   (package | ||||
|  | @ -2243,6 +2258,33 @@ written in pure Python.") | |||
| (define-public python2-jinja2 | ||||
|   (package-with-python2 python-jinja2)) | ||||
| 
 | ||||
| (define-public python-joblib | ||||
|   (package | ||||
|     (name "python-joblib") | ||||
|     (version "0.9.0b4") | ||||
|     (source (origin | ||||
|               (method url-fetch) | ||||
|               (uri (string-append "https://pypi.python.org/packages/source/" | ||||
|                                   "j/joblib/joblib-" version ".tar.gz")) | ||||
|               (sha256 | ||||
|                (base32 | ||||
|                 "1dvw3f8jgj6h0fxkghbgyclvdzc7l0ig7n0vis70awb5kczb9bs3")))) | ||||
|     (build-system python-build-system) | ||||
|     (native-inputs | ||||
|      `(("python-setuptools" ,python-setuptools) | ||||
|        ("python-nose"       ,python-nose))) | ||||
|     (home-page "http://pythonhosted.org/joblib/") | ||||
|     (synopsis "Using Python functions as pipeline jobs") | ||||
|     (description | ||||
|      "Joblib is a set of tools to provide lightweight pipelining in Python. | ||||
| In particular, joblib offers: transparent disk-caching of the output values | ||||
| and lazy re-evaluation (memoize pattern), easy simple parallel computing | ||||
| logging and tracing of the execution.") | ||||
|     (license bsd-3))) | ||||
| 
 | ||||
| (define-public python2-joblib | ||||
|   (package-with-python2 python-joblib)) | ||||
| 
 | ||||
| (define-public python-docutils | ||||
|   (package | ||||
|     (name "python-docutils") | ||||
|  |  | |||
|  | @ -86,9 +86,12 @@ Compression ratios of 2:1 to 3:1 are common for text files.") | |||
|                                    "unzip-CVE-2014-8141.patch" | ||||
|                                    "unzip-CVE-2014-9636.patch" | ||||
|                                    "unzip-allow-greater-hostver-values.patch" | ||||
|                                    "unzip-increase-size-of-cfactorstr.patch" | ||||
|                                    "unzip-initialize-symlink-flag.patch" | ||||
|                                    "unzip-remove-build-date.patch"))))) | ||||
|                                    "unzip-remove-build-date.patch" | ||||
|                                    "unzip-attribs-overflow.patch" | ||||
|                                    "unzip-fix-overflows-and-infloop.patch" | ||||
|                                    "unzip-format-secure.patch" | ||||
|                                    "unzip-overflow-long-fsize.patch"))))) | ||||
|     (build-system gnu-build-system) | ||||
|     ;; no inputs; bzip2 is not supported, since not compiled with BZ_NO_STDIO | ||||
|     (arguments | ||||
|  |  | |||
		Reference in a new issue