]> git.ipfire.org Git - people/ms/ipfire-2.x.git/commitdiff
zlib: Add fix for CVE-2022-37434 fix
authorPeter Müller <peter.mueller@ipfire.org>
Wed, 10 Aug 2022 10:50:57 +0000 (10:50 +0000)
committerPeter Müller <peter.mueller@ipfire.org>
Wed, 10 Aug 2022 10:50:57 +0000 (10:50 +0000)
https://www.openwall.com/lists/oss-security/2022/08/09/1

Signed-off-by: Peter Müller <peter.mueller@ipfire.org>
lfs/zlib
src/patches/zlib-CVE-2022-37434-fix.patch [new file with mode: 0644]

index 8197c9b457498d78637ef2d89440e0cd44b2974e..f24489677150fa3cece61a67dcc08e997f655b5f 100644 (file)
--- a/lfs/zlib
+++ b/lfs/zlib
@@ -78,8 +78,9 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
 
-       # Fix for CVE-2022-37434
+       # Apply fix for CVE-2022-37434 (and a fix for the fix)
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/zlib-CVE-2022-37434.patch
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/zlib-CVE-2022-37434-fix.patch
 
        cd $(DIR_APP) && CROSS_PREFIX=$(CROSS_PREFIX) ./configure --prefix=$(PREFIX) --shared
        cd $(DIR_APP) && make $(MAKETUNING)
diff --git a/src/patches/zlib-CVE-2022-37434-fix.patch b/src/patches/zlib-CVE-2022-37434-fix.patch
new file mode 100644 (file)
index 0000000..ba8e395
--- /dev/null
@@ -0,0 +1,26 @@
+commit 1eb7682f845ac9e9bf9ae35bbfb3bad5dacbd91d
+Author: Mark Adler <fork@madler.net>
+Date:   Mon Aug 8 10:50:09 2022 -0700
+
+    Fix extra field processing bug that dereferences NULL state->head.
+    
+    The recent commit to fix a gzip header extra field processing bug
+    introduced the new bug fixed here.
+
+diff --git a/inflate.c b/inflate.c
+index 7a72897..2a3c4fe 100644
+--- a/inflate.c
++++ b/inflate.c
+@@ -763,10 +763,10 @@ int flush;
+                 copy = state->length;
+                 if (copy > have) copy = have;
+                 if (copy) {
+-                    len = state->head->extra_len - state->length;
+                     if (state->head != Z_NULL &&
+                         state->head->extra != Z_NULL &&
+-                        len < state->head->extra_max) {
++                        (len = state->head->extra_len - state->length) <
++                            state->head->extra_max) {
+                         zmemcpy(state->head->extra + len, next,
+                                 len + copy > state->head->extra_max ?
+                                 state->head->extra_max - len : copy);