]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/commitdiff
zlib: Incorporate fix for CVE-2022-37434
authorPeter Müller <peter.mueller@ipfire.org>
Sun, 7 Aug 2022 09:18:45 +0000 (09:18 +0000)
committerPeter Müller <peter.mueller@ipfire.org>
Mon, 8 Aug 2022 10:11:09 +0000 (10:11 +0000)
https://www.cve.org/CVERecord?id=CVE-2022-37434

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

index 19740fb7f49ddddf9b637a1f2a95b9687e04f02c..8197c9b457498d78637ef2d89440e0cd44b2974e 100644 (file)
--- a/lfs/zlib
+++ b/lfs/zlib
@@ -77,6 +77,10 @@ $(subst %,%_BLAKE2,$(objects)) :
 $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        @$(PREBUILD)
        @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE)
+
+       # Fix for CVE-2022-37434
+       cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/zlib-CVE-2022-37434.patch
+
        cd $(DIR_APP) && CROSS_PREFIX=$(CROSS_PREFIX) ./configure --prefix=$(PREFIX) --shared
        cd $(DIR_APP) && make $(MAKETUNING)
        cd $(DIR_APP) && make install
diff --git a/src/patches/zlib-CVE-2022-37434.patch b/src/patches/zlib-CVE-2022-37434.patch
new file mode 100644 (file)
index 0000000..95e9f17
--- /dev/null
@@ -0,0 +1,29 @@
+commit eff308af425b67093bab25f80f1ae950166bece1
+Author: Mark Adler <fork@madler.net>
+Date:   Sat Jul 30 15:51:11 2022 -0700
+
+    Fix a bug when getting a gzip header extra field with inflate().
+    
+    If the extra field was larger than the space the user provided with
+    inflateGetHeader(), and if multiple calls of inflate() delivered
+    the extra header data, then there could be a buffer overflow of the
+    provided space. This commit assures that provided space is not
+    exceeded.
+
+diff --git a/inflate.c b/inflate.c
+index 7be8c63..7a72897 100644
+--- a/inflate.c
++++ b/inflate.c
+@@ -763,9 +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_len - state->length;
++                        state->head->extra != Z_NULL &&
++                        len < state->head->extra_max) {
+                         zmemcpy(state->head->extra + len, next,
+                                 len + copy > state->head->extra_max ?
+                                 state->head->extra_max - len : copy);