gnu: unzip: Reorganize security fixes for improved clarity.
* gnu/packages/patches/unzip-fix-overflows-and-infloop.patch: Delete file. Its contents are now split into the following new files: * gnu/packages/patches/unzip-CVE-2015-7696.patch, gnu/packages/patches/unzip-CVE-2015-7697.patch, gnu/packages/patches/unzip-overflow-on-invalid-input.patch: New files. * gnu-system.am (dist_patch_DATA): Adjust accordingly. * gnu/packages/zip.scm (unzip)[source]: Adjust patches accordingly.
This commit is contained in:
		
							parent
							
								
									d3365d4866
								
							
						
					
					
						commit
						51de92a08e
					
				
					 6 changed files with 109 additions and 110 deletions
				
			
		|  | @ -651,9 +651,11 @@ dist_patch_DATA =						\ | |||
|   gnu/packages/patches/unzip-CVE-2014-8140.patch		\ | ||||
|   gnu/packages/patches/unzip-CVE-2014-8141.patch		\ | ||||
|   gnu/packages/patches/unzip-CVE-2014-9636.patch		\ | ||||
|   gnu/packages/patches/unzip-CVE-2015-7696.patch		\ | ||||
|   gnu/packages/patches/unzip-CVE-2015-7697.patch		\ | ||||
|   gnu/packages/patches/unzip-allow-greater-hostver-values.patch	\ | ||||
|   gnu/packages/patches/unzip-attribs-overflow.patch		\ | ||||
|   gnu/packages/patches/unzip-fix-overflows-and-infloop.patch	\ | ||||
|   gnu/packages/patches/unzip-overflow-on-invalid-input.patch	\ | ||||
|   gnu/packages/patches/unzip-format-secure.patch		\ | ||||
|   gnu/packages/patches/unzip-initialize-symlink-flag.patch	\ | ||||
|   gnu/packages/patches/unzip-overflow-long-fsize.patch		\ | ||||
|  |  | |||
							
								
								
									
										35
									
								
								gnu/packages/patches/unzip-CVE-2015-7696.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								gnu/packages/patches/unzip-CVE-2015-7696.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,35 @@ | |||
| Copied from Debian. | ||||
| 
 | ||||
| From: Petr Stodulka <pstodulk@redhat.com> | ||||
| Date: Mon, 14 Sep 2015 18:23:17 +0200 | ||||
| Subject: Upstream fix for heap overflow | ||||
| Bug-Debian: https://bugs.debian.org/802162 | ||||
| Bug-RedHat: https://bugzilla.redhat.com/show_bug.cgi?id=1260944 | ||||
| Origin: https://bugzilla.redhat.com/attachment.cgi?id=1073002 | ||||
| Forwarded: yes | ||||
| 
 | ||||
| ---
 | ||||
|  crypt.c | 12 +++++++++++- | ||||
|  1 file changed, 11 insertions(+), 1 deletion(-) | ||||
| 
 | ||||
| --- a/crypt.c
 | ||||
| +++ b/crypt.c
 | ||||
| @@ -465,7 +465,17 @@
 | ||||
|      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])); | ||||
|      } | ||||
							
								
								
									
										28
									
								
								gnu/packages/patches/unzip-CVE-2015-7697.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								gnu/packages/patches/unzip-CVE-2015-7697.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,28 @@ | |||
| Copied from Debian. | ||||
| 
 | ||||
| From: Kamil Dudka <kdudka@redhat.com> | ||||
| Date: Mon, 14 Sep 2015 18:24:56 +0200 | ||||
| Subject: fix infinite loop when extracting empty bzip2 data | ||||
| Bug-Debian: https://bugs.debian.org/802160 | ||||
| Bug-RedHat: https://bugzilla.redhat.com/show_bug.cgi?id=1260944 | ||||
| Origin: other, https://bugzilla.redhat.com/attachment.cgi?id=1073339 | ||||
| 
 | ||||
| ---
 | ||||
|  extract.c | 6 ++++++ | ||||
|  1 file changed, 6 insertions(+) | ||||
| 
 | ||||
| --- a/extract.c
 | ||||
| +++ b/extract.c
 | ||||
| @@ -2728,6 +2728,12 @@
 | ||||
|      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; | ||||
|  | @ -1,108 +0,0 @@ | |||
| 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 | ||||
| 
 | ||||
							
								
								
									
										40
									
								
								gnu/packages/patches/unzip-overflow-on-invalid-input.patch
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								gnu/packages/patches/unzip-overflow-on-invalid-input.patch
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,40 @@ | |||
| Extracted from a patch in Fedora. | ||||
| 
 | ||||
| http://pkgs.fedoraproject.org/cgit/unzip.git/tree/unzip-6.0-heap-overflow-infloop.patch?id=d18f821e | ||||
| 
 | ||||
| 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 | ||||
| 
 | ||||
|  | @ -85,11 +85,13 @@ Compression ratios of 2:1 to 3:1 are common for text files.") | |||
|                                    "unzip-CVE-2014-8140.patch" | ||||
|                                    "unzip-CVE-2014-8141.patch" | ||||
|                                    "unzip-CVE-2014-9636.patch" | ||||
|                                    "unzip-CVE-2015-7696.patch" | ||||
|                                    "unzip-CVE-2015-7697.patch" | ||||
|                                    "unzip-allow-greater-hostver-values.patch" | ||||
|                                    "unzip-initialize-symlink-flag.patch" | ||||
|                                    "unzip-remove-build-date.patch" | ||||
|                                    "unzip-attribs-overflow.patch" | ||||
|                                    "unzip-fix-overflows-and-infloop.patch" | ||||
|                                    "unzip-overflow-on-invalid-input.patch" | ||||
|                                    "unzip-format-secure.patch" | ||||
|                                    "unzip-overflow-long-fsize.patch"))))) | ||||
|     (build-system gnu-build-system) | ||||
|  |  | |||
		Reference in a new issue