Fix incorrect integer overflow check in HTTP2 implementation
Resolves: RHEL-20239
This commit is contained in:
		
							parent
							
								
									f21267bde2
								
							
						
					
					
						commit
						527e3ae0da
					
				
							
								
								
									
										38
									
								
								0001-CVE-2023-51714-qtbase-5.15.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								0001-CVE-2023-51714-qtbase-5.15.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,38 @@ | |||||||
|  | From ea63c28efc1d2ecb467b83a34923d12462efa96f Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Marc Mutz <marc.mutz@qt.io> | ||||||
|  | Date: Tue, 12 Dec 2023 20:51:56 +0100 | ||||||
|  | Subject: [PATCH] HPack: fix a Yoda Condition | ||||||
|  | 
 | ||||||
|  | Putting the variable on the LHS of a relational operation makes the | ||||||
|  | expression easier to read. In this case, we find that the whole | ||||||
|  | expression is nonsensical as an overflow protection, because if | ||||||
|  | name.size() + value.size() overflows, the result will exactly _not_ | ||||||
|  | be > max() - 32, because UB will have happened. | ||||||
|  | 
 | ||||||
|  | To be fixed in a follow-up commit. | ||||||
|  | 
 | ||||||
|  | As a drive-by, add parentheses around the RHS. | ||||||
|  | 
 | ||||||
|  | Change-Id: I35ce598884c37c51b74756b3bd2734b9aad63c09 | ||||||
|  | Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> | ||||||
|  | (cherry picked from commit 658607a34ead214fbacbc2cca44915655c318ea9) | ||||||
|  | Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | ||||||
|  | (cherry picked from commit 4f7efd41740107f90960116700e3134f5e433867) | ||||||
|  | (cherry picked from commit 13c16b756900fe524f6d9534e8a07aa003c05e0c) | ||||||
|  | (cherry picked from commit 1d4788a39668fb2dc5912a8d9c4272dc40e99f92) | ||||||
|  | (cherry picked from commit 87de75b5cc946d196decaa6aef4792a6cac0b6db) | ||||||
|  | ---
 | ||||||
|  | 
 | ||||||
|  | diff --git a/src/network/access/http2/hpacktable.cpp b/src/network/access/http2/hpacktable.cpp
 | ||||||
|  | index 834214f..ab166a6 100644
 | ||||||
|  | --- a/src/network/access/http2/hpacktable.cpp
 | ||||||
|  | +++ b/src/network/access/http2/hpacktable.cpp
 | ||||||
|  | @@ -63,7 +63,7 @@
 | ||||||
|  |      // 32 octets of overhead." | ||||||
|  | 
 | ||||||
|  |      const unsigned sum = unsigned(name.size() + value.size()); | ||||||
|  | -    if (std::numeric_limits<unsigned>::max() - 32 < sum)
 | ||||||
|  | +    if (sum > (std::numeric_limits<unsigned>::max() - 32))
 | ||||||
|  |          return HeaderSize(); | ||||||
|  |      return HeaderSize(true, quint32(sum + 32)); | ||||||
|  |  } | ||||||
							
								
								
									
										59
									
								
								0002-CVE-2023-51714-qtbase-5.15.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								0002-CVE-2023-51714-qtbase-5.15.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,59 @@ | |||||||
|  | From 23c3fc483e8b6e21012a61f0bea884446f727776 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: Marc Mutz <marc.mutz@qt.io> | ||||||
|  | Date: Tue, 12 Dec 2023 22:08:07 +0100 | ||||||
|  | Subject: [PATCH] HPack: fix incorrect integer overflow check | ||||||
|  | 
 | ||||||
|  | This code never worked: | ||||||
|  | 
 | ||||||
|  | For the comparison with max() - 32 to trigger, on 32-bit platforms (or | ||||||
|  | Qt 5) signed interger overflow would have had to happen in the | ||||||
|  | addition of the two sizes. The compiler can therefore remove the | ||||||
|  | overflow check as dead code. | ||||||
|  | 
 | ||||||
|  | On Qt 6 and 64-bit platforms, the signed integer addition would be | ||||||
|  | very unlikely to overflow, but the following truncation to uint32 | ||||||
|  | would yield the correct result only in a narrow 32-value window just | ||||||
|  | below UINT_MAX, if even that. | ||||||
|  | 
 | ||||||
|  | Fix by using the proper tool, qAddOverflow. | ||||||
|  | 
 | ||||||
|  | Manual conflict resolutions: | ||||||
|  |  - qAddOverflow doesn't exist in Qt 5, use private add_overflow | ||||||
|  |    predecessor API instead | ||||||
|  | 
 | ||||||
|  | Change-Id: I7599f2e75ff7f488077b0c60b81022591005661c | ||||||
|  | Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> | ||||||
|  | (cherry picked from commit ee5da1f2eaf8932aeca02ffea6e4c618585e29e3) | ||||||
|  | Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | ||||||
|  | (cherry picked from commit debeb8878da2dc706ead04b6072ecbe7e5313860) | ||||||
|  | Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> | ||||||
|  | Reviewed-by: Marc Mutz <marc.mutz@qt.io> | ||||||
|  | (cherry picked from commit 811b9eef6d08d929af8708adbf2a5effb0eb62d7) | ||||||
|  | (cherry picked from commit f931facd077ce945f1e42eaa3bead208822d3e00) | ||||||
|  | (cherry picked from commit 9ef4ca5ecfed771dab890856130e93ef5ceabef5) | ||||||
|  | Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io> | ||||||
|  | ---
 | ||||||
|  | 
 | ||||||
|  | diff --git a/src/network/access/http2/hpacktable.cpp b/src/network/access/http2/hpacktable.cpp
 | ||||||
|  | index ab166a6..de91fc0 100644
 | ||||||
|  | --- a/src/network/access/http2/hpacktable.cpp
 | ||||||
|  | +++ b/src/network/access/http2/hpacktable.cpp
 | ||||||
|  | @@ -40,6 +40,7 @@
 | ||||||
|  |  #include "hpacktable_p.h" | ||||||
|  | 
 | ||||||
|  |  #include <QtCore/qdebug.h> | ||||||
|  | +#include <QtCore/private/qnumeric_p.h>
 | ||||||
|  | 
 | ||||||
|  |  #include <algorithm> | ||||||
|  |  #include <cstddef> | ||||||
|  | @@ -62,7 +63,9 @@
 | ||||||
|  |      // for counting the number of references to the name and value would have | ||||||
|  |      // 32 octets of overhead." | ||||||
|  | 
 | ||||||
|  | -    const unsigned sum = unsigned(name.size() + value.size());
 | ||||||
|  | +    size_t sum;
 | ||||||
|  | +    if (add_overflow(size_t(name.size()), size_t(value.size()), &sum))
 | ||||||
|  | +        return HeaderSize();
 | ||||||
|  |      if (sum > (std::numeric_limits<unsigned>::max() - 32)) | ||||||
|  |          return HeaderSize(); | ||||||
|  |      return HeaderSize(true, quint32(sum + 32)); | ||||||
| @ -57,7 +57,7 @@ BuildRequires: pkgconfig(libsystemd) | |||||||
| Name:    qt5-qtbase | Name:    qt5-qtbase | ||||||
| Summary: Qt5 - QtBase components | Summary: Qt5 - QtBase components | ||||||
| Version: 5.15.9 | Version: 5.15.9 | ||||||
| Release: 7%{?dist} | Release: 8%{?dist} | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| # See LGPL_EXCEPTIONS.txt, for exception details | # See LGPL_EXCEPTIONS.txt, for exception details | ||||||
| @ -149,6 +149,8 @@ Patch112: CVE-2023-33285-qtbase-5.15.patch | |||||||
| Patch113: CVE-2023-34410-qtbase-5.15.patch | Patch113: CVE-2023-34410-qtbase-5.15.patch | ||||||
| Patch114: CVE-2023-37369-qtbase-5.15.patch | Patch114: CVE-2023-37369-qtbase-5.15.patch | ||||||
| Patch115: CVE-2023-38197-qtbase-5.15.patch | Patch115: CVE-2023-38197-qtbase-5.15.patch | ||||||
|  | Patch116: 0001-CVE-2023-51714-qtbase-5.15.patch | ||||||
|  | Patch117: 0002-CVE-2023-51714-qtbase-5.15.patch | ||||||
| 
 | 
 | ||||||
| # gating related patches | # gating related patches | ||||||
| Patch200: qtbase-disable-tests-not-working-in-gating.patch | Patch200: qtbase-disable-tests-not-working-in-gating.patch | ||||||
| @ -438,6 +440,8 @@ Qt5 libraries used for drawing widgets and OpenGL items. | |||||||
| %patch -P113 -p1 | %patch -P113 -p1 | ||||||
| %patch -P114 -p1 | %patch -P114 -p1 | ||||||
| %patch -P115 -p1 | %patch -P115 -p1 | ||||||
|  | %patch -P116 -p1 | ||||||
|  | %patch -P117 -p1 | ||||||
| 
 | 
 | ||||||
| ## gating related patches | ## gating related patches | ||||||
| %patch -P200 -p1 -b .disable-tests-not-working-in-gating | %patch -P200 -p1 -b .disable-tests-not-working-in-gating | ||||||
| @ -1138,6 +1142,10 @@ fi | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Thu Jan 04 2024 Jan Grulich <jgrulich@redhat.com> - 5.15.9-8 | ||||||
|  | - Fix incorrect integer overflow check in HTTP2 implementation | ||||||
|  |   Resolves: RHEL-20239 | ||||||
|  | 
 | ||||||
| * Fri Jul 21 2023 Jan Grulich <jgrulich@redhat.com> - 5.15.9-7 | * Fri Jul 21 2023 Jan Grulich <jgrulich@redhat.com> - 5.15.9-7 | ||||||
| - Fix infinite loops in QXmlStreamReader (CVE-2023-38197) | - Fix infinite loops in QXmlStreamReader (CVE-2023-38197) | ||||||
|   Resolves: bz#2222771 |   Resolves: bz#2222771 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user