Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions pkgs/by-name/un/unzip/CVE-2021-4217.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
From 731d698377dbd1f5b1b90efeb8094602ed59fc40 Mon Sep 17 00:00:00 2001
From: Nils Bars <nils.bars@t-online.de>
Date: Mon, 17 Jan 2022 16:53:16 +0000
Subject: [PATCH] Fix null pointer dereference and use of uninitialized data

This fixes a bug that causes use of uninitialized heap data if `readbuf` fails
to read as many bytes as indicated by the extra field length attribute.
Furthermore, this fixes a null pointer dereference if an archive contains an
`EF_UNIPATH` extra field but does not have a filename set.
---
fileio.c | 5 ++++-
process.c | 6 +++++-
2 files changed, 9 insertions(+), 2 deletions(-)

--- a/fileio.c
+++ b/fileio.c
@@ -2310,8 +2310,11 @@ int do_string(__G__ length, option) /*
seek_zipf(__G__ G.cur_zipfile_bufstart - G.extra_bytes +
(G.inptr-G.inbuf) + length);
} else {
- if (readbuf(__G__ (char *)G.extra_field, length) == 0)
+ unsigned bytes_read = readbuf(__G__ (char *)G.extra_field, length);
+ if (bytes_read == 0)
return PK_EOF;
+ if (bytes_read != length)
+ return PK_ERR;
/* Looks like here is where extra fields are read */
if (getZip64Data(__G__ G.extra_field, length) != PK_COOL)
{
--- a/process.c
+++ b/process.c
@@ -2067,10 +2067,14 @@ int getUnicodeData(__G__ ef_buf, ef_len)
G.unipath_checksum = makelong(offset + ef_buf);
offset += 4;

+ if (!G.filename_full) {
+ /* Check if we have a unicode extra section but no filename set */
+ return PK_ERR;
+ }
+
/*
* Compute 32-bit crc
*/
-
chksum = crc32(chksum, (uch *)(G.filename_full),
strlen(G.filename_full));

6 changes: 1 addition & 5 deletions pkgs/by-name/un/unzip/package.nix
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,7 @@ stdenv.mkDerivation rec {
# Clang 16 makes implicit declarations an error by default for C99 and newer, causing the
# configure script to fail to detect errno and the directory libraries on Darwin.
./implicit-declarations-fix.patch
(fetchurl {
name = "CVE-2021-4217.patch";
url = "https://git.launchpad.net/ubuntu/+source/unzip/plain/debian/patches/CVE-2021-4217.patch?id=94a790fcbb5d6c53cdf5d786bcaa0b8dc10309b6";
hash = "sha256-YKE4jVNSlrHLbszXNYYRtAQs0ly4AsodEz6tadMIVqE=";
})
./CVE-2021-4217.patch
]
++ lib.optional enableNLS (fetchurl {
url = "https://gitweb.gentoo.org/repo/gentoo.git/plain/app-arch/unzip/files/unzip-6.0-natspec.patch?id=56bd759df1d0c750a065b8c845e93d5dfa6b549d";
Expand Down
Loading