zlib: backport fix for heap-based buffer over-read (CVE-2022-37434)
zlib through 1.2.12 has a heap-based buffer over-read or buffer overflow in inflate in inflate.c via a large gzip header extra field. NOTE: only applications that call inflateGetHeader are affected. Some common applications bundle the affected zlib source code but may be unable to call inflateGetHeader. Fixes: CVE-2022-37434 References: https://github.com/ivd38/zlib_overflow Signed-off-by: Petr Štetiar <ynezz@true.cz>
This commit is contained in:
		
							
								
								
									
										32
									
								
								package/libs/zlib/patches/006-fix-CVE-2022-37434.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								package/libs/zlib/patches/006-fix-CVE-2022-37434.patch
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,32 @@ | |||||||
|  | From eff308af425b67093bab25f80f1ae950166bece1 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Mark Adler <fork@madler.net> | ||||||
|  | Date: Sat, 30 Jul 2022 15:51:11 -0700 | ||||||
|  | Subject: [PATCH] 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. | ||||||
|  | --- | ||||||
|  |  inflate.c | 5 +++-- | ||||||
|  |  1 file changed, 3 insertions(+), 2 deletions(-) | ||||||
|  |  | ||||||
|  | diff --git a/inflate.c b/inflate.c | ||||||
|  | index 7be8c6366..7a7289749 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); | ||||||
		Reference in New Issue
	
	Block a user
	 Petr Štetiar
					Petr Štetiar