diff options
Diffstat (limited to 'www/qt5-webengine/files/patch-security-rollup')
-rw-r--r-- | www/qt5-webengine/files/patch-security-rollup | 891 |
1 files changed, 0 insertions, 891 deletions
diff --git a/www/qt5-webengine/files/patch-security-rollup b/www/qt5-webengine/files/patch-security-rollup deleted file mode 100644 index b27b8cec77c9..000000000000 --- a/www/qt5-webengine/files/patch-security-rollup +++ /dev/null @@ -1,891 +0,0 @@ -Add security patches to this file. - -Addresses the following security issues: - -- Security bug 329674887 -- CVE-2024-3157 -- CVE-2024-3516 -- CVE-2024-3839 -- CVE-2024-3837 -- Security bug 40940917 -- CVE-2024-4058 -- Security bug 327698060 -- CVE-2024-4558 -- CVE-2024-3914 -- Security bug 329699609 - -From a3580d0a0fc78016093fd96d72f1449589642292 Mon Sep 17 00:00:00 2001 -From: Marco Paniconi <marpan@google.com> -Date: Wed, 13 Mar 2024 10:58:17 -0700 -Subject: [PATCH] [Backport] Security bug 329674887 (1/2) - -Cherry-pick of patch orignally reviewed on -https://chromium-review.googlesource.com/c/webm/libvpx/+/5370376: -Fix to buffer alloc for vp9_bitstream_worker_data - -The code was using the bitstream_worker_data when it -wasn't allocated for big enough size. This is because -the existing condition was to only re-alloc the -bitstream_worker_data when current dest_size was larger -than the current frame_size. But under resolution change -where frame_size is increased, beyond the current dest_size, -we need to allow re-alloc to the new size. - -The existing condition to re-alloc when dest_size is -larger than frame_size (which is not required) is kept -for now. - -Also increase the dest_size to account for image format. - -Added tests, for both ROW_MT=0 and 1, that reproduce -the failures in the bugs below. - -Note: this issue only affects the REALTIME encoding path. - -Bug: b/329088759, b/329674887, b/329179808 - -Change-Id: Icd65dbc5317120304d803f648d4bd9405710db6f -Reviewed-on: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/554667 -Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> ---- - .../source/libvpx/vp9/encoder/vp9_bitstream.c | 14 +++++++++++--- - 1 file changed, 11 insertions(+), 3 deletions(-) - -diff --git a/chromium/third_party/libvpx/source/libvpx/vp9/encoder/vp9_bitstream.c b/chromium/third_party/libvpx/source/libvpx/vp9/encoder/vp9_bitstream.c -index 3eff4ce830d1..22db39714922 100644 ---- src/3rdparty/chromium/third_party/libvpx/source/libvpx/vp9/encoder/vp9_bitstream.c -+++ src/3rdparty/chromium/third_party/libvpx/source/libvpx/vp9/encoder/vp9_bitstream.c -@@ -963,6 +963,14 @@ void vp9_bitstream_encode_tiles_buffer_dealloc(VP9_COMP *const cpi) { - } - } - -+static int encode_tiles_buffer_alloc_size(VP9_COMP *const cpi) { -+ VP9_COMMON *const cm = &cpi->common; -+ const int image_bps = -+ (8 + 2 * (8 >> (cm->subsampling_x + cm->subsampling_y))) * -+ (1 + (cm->bit_depth > 8)); -+ return cpi->oxcf.width * cpi->oxcf.height * image_bps / 8; -+} -+ - static int encode_tiles_buffer_alloc(VP9_COMP *const cpi) { - int i; - const size_t worker_data_size = -@@ -972,7 +980,7 @@ static int encode_tiles_buffer_alloc(VP9_COMP *const cpi) { - if (!cpi->vp9_bitstream_worker_data) return 1; - for (i = 1; i < cpi->num_workers; ++i) { - cpi->vp9_bitstream_worker_data[i].dest_size = -- cpi->oxcf.width * cpi->oxcf.height; -+ encode_tiles_buffer_alloc_size(cpi); - cpi->vp9_bitstream_worker_data[i].dest = - vpx_malloc(cpi->vp9_bitstream_worker_data[i].dest_size); - if (!cpi->vp9_bitstream_worker_data[i].dest) return 1; -@@ -989,8 +997,8 @@ static size_t encode_tiles_mt(VP9_COMP *cpi, uint8_t *data_ptr) { - int tile_col = 0; - - if (!cpi->vp9_bitstream_worker_data || -- cpi->vp9_bitstream_worker_data[1].dest_size > -- (cpi->oxcf.width * cpi->oxcf.height)) { -+ cpi->vp9_bitstream_worker_data[1].dest_size != -+ encode_tiles_buffer_alloc_size(cpi)) { - vp9_bitstream_encode_tiles_buffer_dealloc(cpi); - if (encode_tiles_buffer_alloc(cpi)) return 0; - } -From 7c81b9390d837ffbaccb1846db64960b4a79626f Mon Sep 17 00:00:00 2001 -From: Marco Paniconi <marpan@google.com> -Date: Sat, 16 Mar 2024 10:39:28 -0700 -Subject: [PATCH] [Backport] Security bug 329674887 (2/2) - -Cherry-pick of patch originally reviewed on -https://chromium-review.googlesource.com/c/webm/libvpx/+/5375794: -vp9: fix to integer overflow test - -failure for the 16k test: issue introduced -in: c29e637283 - -Bug: b/329088759, b/329674887, b/329179808 - -Change-Id: I88e8a36b7f13223997c3006c84aec9cfa48c0bcf -Reviewed-on: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/554668 -Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> ---- - .../libvpx/source/libvpx/vp9/encoder/vp9_bitstream.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/chromium/third_party/libvpx/source/libvpx/vp9/encoder/vp9_bitstream.c b/chromium/third_party/libvpx/source/libvpx/vp9/encoder/vp9_bitstream.c -index 22db3971492..645ba6ebb3a 100644 ---- src/3rdparty/chromium/third_party/libvpx/source/libvpx/vp9/encoder/vp9_bitstream.c -+++ src/3rdparty/chromium/third_party/libvpx/source/libvpx/vp9/encoder/vp9_bitstream.c -@@ -968,7 +968,9 @@ static int encode_tiles_buffer_alloc_size(VP9_COMP *const cpi) { - const int image_bps = - (8 + 2 * (8 >> (cm->subsampling_x + cm->subsampling_y))) * - (1 + (cm->bit_depth > 8)); -- return cpi->oxcf.width * cpi->oxcf.height * image_bps / 8; -+ const int64_t size = -+ (int64_t)cpi->oxcf.width * cpi->oxcf.height * image_bps / 8; -+ return (int)size; - } - - static int encode_tiles_buffer_alloc(VP9_COMP *const cpi) { -From 11ecd608320b14500f912e827b5b0eab285b8142 Mon Sep 17 00:00:00 2001 -From: kylechar <kylechar@chromium.org> -Date: Tue, 9 Apr 2024 17:14:26 +0000 -Subject: [PATCH] [Backport] CVE-2024-3157: Out of bounds write in Compositing - -Cherry-pick of patch originally reviewed on -https://chromium-review.googlesource.com/c/chromium/src/+/5420432: -Validate buffer length - -The BitmapInSharedMemory mojo traits were only validating row length and -not total buffer length. - -(cherry picked from commit 1a19ff70bd54847d818566bd7a1e7c384c419746) - -(cherry picked from commit f15315f1cb7897e208947a40d538aac693283d7f) - -Bug: 331237485 -Change-Id: Ia2318899c44e9e7ac72fc7183954e6ce2c702179 -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5396796 -Commit-Queue: Kyle Charbonneau <kylechar@chromium.org> -Cr-Original-Original-Commit-Position: refs/heads/main@{#1278417} -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5420432 -Commit-Queue: danakj <danakj@chromium.org> -Cr-Original-Commit-Position: refs/branch-heads/6312@{#786} -Cr-Original-Branched-From: 6711dcdae48edaf98cbc6964f90fac85b7d9986e-refs/heads/main@{#1262506} -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5433678 -Reviewed-by: danakj <danakj@chromium.org> -Reviewed-by: Kyle Charbonneau <kylechar@chromium.org> -Cr-Commit-Position: refs/branch-heads/6099@{#2003} -Cr-Branched-From: e6ee4500f7d6549a9ac1354f8d056da49ef406be-refs/heads/main@{#1217362} -Reviewed-on: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/554669 -Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> ---- - .../cpp/compositing/bitmap_in_shared_memory_mojom_traits.cc | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/chromium/services/viz/public/cpp/compositing/bitmap_in_shared_memory_mojom_traits.cc b/chromium/services/viz/public/cpp/compositing/bitmap_in_shared_memory_mojom_traits.cc -index f602fa100477..c6d84002b3e4 100644 ---- src/3rdparty/chromium/services/viz/public/cpp/compositing/bitmap_in_shared_memory_mojom_traits.cc -+++ src/3rdparty/chromium/services/viz/public/cpp/compositing/bitmap_in_shared_memory_mojom_traits.cc -@@ -69,6 +69,10 @@ bool StructTraits<viz::mojom::BitmapInSharedMemoryDataView, SkBitmap>::Read( - if (!mapping_ptr->IsValid()) - return false; - -+ if (mapping_ptr->size() < image_info.computeByteSize(data.row_bytes())) { -+ return false; -+ } -+ - if (!sk_bitmap->installPixels(image_info, mapping_ptr->memory(), - data.row_bytes(), &DeleteSharedMemoryMapping, - mapping_ptr.get())) { -From 060d3aa868d6f4403a9416fe34b48ffbfcfe19cb Mon Sep 17 00:00:00 2001 -From: Shahbaz Youssefi <syoussefi@chromium.org> -Date: Mon, 25 Mar 2024 14:46:56 -0400 -Subject: [PATCH] [Backport] CVE-2024-3516: Heap buffer overflow in ANGLE - -Cherry-pick of patch originally reviewed on -https://chromium-review.googlesource.com/c/angle/angle/+/5391986: -Translator: Disallow samplers in structs in interface blocks - -As disallowed by the spec: - -> Types and declarators are the same as for other uniform variable -> declarations outside blocks, with these exceptions: -> -> * opaque types are not allowed - -Bug: chromium:328859176 -Change-Id: Ib94977860102329e520e635c3757827c93ca2163 -Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5391986 -Auto-Submit: Shahbaz Youssefi <syoussefi@chromium.org> -Reviewed-by: Geoff Lang <geofflang@chromium.org> -Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> -Reviewed-on: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/554670 -Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> ---- - .../src/compiler/translator/ParseContext.cpp | 33 ++++++++++++------- - 1 file changed, 21 insertions(+), 12 deletions(-) - -diff --git a/chromium/third_party/angle/src/compiler/translator/ParseContext.cpp b/chromium/third_party/angle/src/compiler/translator/ParseContext.cpp -index 84a0c8fd9e0d..3e8a4a71ff67 100644 ---- src/3rdparty/chromium/third_party/angle/src/compiler/translator/ParseContext.cpp -+++ src/3rdparty/chromium/third_party/angle/src/compiler/translator/ParseContext.cpp -@@ -34,27 +34,39 @@ namespace - - const int kWebGLMaxStructNesting = 4; - --bool ContainsSampler(const TStructure *structType); -+struct IsSamplerFunc -+{ -+ bool operator()(TBasicType type) { return IsSampler(type); } -+}; -+struct IsOpaqueFunc -+{ -+ bool operator()(TBasicType type) { return IsOpaqueType(type); } -+}; -+ -+template <typename OpaqueFunc> -+bool ContainsOpaque(const TStructure *structType); - --bool ContainsSampler(const TType &type) -+template <typename OpaqueFunc> -+bool ContainsOpaque(const TType &type) - { -- if (IsSampler(type.getBasicType())) -+ if (OpaqueFunc{}(type.getBasicType())) - { - return true; - } - if (type.getBasicType() == EbtStruct) - { -- return ContainsSampler(type.getStruct()); -+ return ContainsOpaque<OpaqueFunc>(type.getStruct()); - } - - return false; - } - --bool ContainsSampler(const TStructure *structType) -+template <typename OpaqueFunc> -+bool ContainsOpaque(const TStructure *structType) - { - for (const auto &field : structType->fields()) - { -- if (ContainsSampler(*field->type())) -+ if (ContainsOpaque<OpaqueFunc>(*field->type())) - return true; - } - return false; -@@ -915,7 +927,7 @@ bool TParseContext::checkIsNotOpaqueType(const TSourceLoc &line, - { - if (pType.type == EbtStruct) - { -- if (ContainsSampler(pType.userDef)) -+ if (ContainsOpaque<IsSamplerFunc>(pType.userDef)) - { - std::stringstream reasonStream = sh::InitializeStream<std::stringstream>(); - reasonStream << reason << " (structure contains a sampler)"; -@@ -3900,12 +3912,9 @@ TIntermDeclaration *TParseContext::addInterfaceBlock( - { - TField *field = (*fieldList)[memberIndex]; - TType *fieldType = field->type(); -- if (IsOpaqueType(fieldType->getBasicType())) -+ if (ContainsOpaque<IsOpaqueFunc>(*fieldType)) - { -- std::string reason("unsupported type - "); -- reason += fieldType->getBasicString(); -- reason += " types are not allowed in interface blocks"; -- error(field->line(), reason.c_str(), fieldType->getBasicString()); -+ error(field->line(), "Opaque types are not allowed in interface blocks", blockName); - } - - const TQualifier qualifier = fieldType->getQualifier(); -From 2c61d151bd3fab48c7e03a4cbfca22fa09c9022c Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Dominik=20R=C3=B6ttsches?= <drott@chromium.org> -Date: Thu, 14 Mar 2024 12:48:18 +0000 -Subject: [PATCH] [Backport] CVE-2024-3839: Out of bounds read in Fonts -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Cherry-pick of patch originally reviewed on -https://chromium-review.googlesource.com/c/chromium/src/+/5361874: -Disable STAT sanitization/checks through OTS - -Due to issues in upstream, OTS STAT sanitization does not provide an -added security benefit. Pass-through the STAT table. - -Bug: chromium:41491859 -Change-Id: I19dcd87376af553afe242452396b951a74691f3c -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5361874 -Commit-Queue: Dominik Röttsches <drott@chromium.org> -Reviewed-by: Koji Ishii <kojii@chromium.org> -Cr-Commit-Position: refs/heads/main@{#1272710} -Reviewed-on: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/560661 -Reviewed-by: Michal Klocek <michal.klocek@qt.io> ---- - .../blink/renderer/platform/fonts/web_font_decoder.cc | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/chromium/third_party/blink/renderer/platform/fonts/web_font_decoder.cc b/chromium/third_party/blink/renderer/platform/fonts/web_font_decoder.cc -index e72f801016a3..dfae30c22c22 100644 ---- src/3rdparty/chromium/third_party/blink/renderer/platform/fonts/web_font_decoder.cc -+++ src/3rdparty/chromium/third_party/blink/renderer/platform/fonts/web_font_decoder.cc -@@ -97,6 +97,7 @@ ots::TableAction BlinkOTSContext::GetTableAction(uint32_t tag) { - const uint32_t kCpalTag = OTS_TAG('C', 'P', 'A', 'L'); - const uint32_t kCff2Tag = OTS_TAG('C', 'F', 'F', '2'); - const uint32_t kSbixTag = OTS_TAG('s', 'b', 'i', 'x'); -+ const uint32_t kStatTag = OTS_TAG('S', 'T', 'A', 'T'); - #if HB_VERSION_ATLEAST(1, 0, 0) - const uint32_t kGdefTag = OTS_TAG('G', 'D', 'E', 'F'); - const uint32_t kGposTag = OTS_TAG('G', 'P', 'O', 'S'); -@@ -123,6 +124,7 @@ ots::TableAction BlinkOTSContext::GetTableAction(uint32_t tag) { - case kCpalTag: - case kCff2Tag: - case kSbixTag: -+ case kStatTag: - #if HB_VERSION_ATLEAST(1, 0, 0) - // Let HarfBuzz handle how to deal with broken tables. - case kAvarTag: -From 0594d0383b46e78d33fde62258ffb49b53d3c429 Mon Sep 17 00:00:00 2001 -From: Liza Burakova <liza@chromium.org> -Date: Wed, 21 Feb 2024 19:02:15 +0000 -Subject: [PATCH] [Backport] CVE-2024-3837: Use after free in QUIC - -Manual cherry-pick of patch originally reviewed on -https://chromium-review.googlesource.com/c/chromium/src/+/5268864: -Check if session is going away in Handle::RequestStream. - -This CL adds an extra check in the QuicChromiumClientSession -handle's RequestSession to make sure the session is not -marked as going away before creating a new StreamRequest. - -Bug: 41491379 -Change-Id: I687dfc23131871cdba345d3cf78dbbbd2e619ce9 -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5268864 -Reviewed-by: Kenichi Ishibashi <bashi@chromium.org> -Commit-Queue: Liza Burakova <liza@chromium.org> -Cr-Commit-Position: refs/heads/main@{#1263483} -Reviewed-on: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/560662 -Reviewed-by: Michal Klocek <michal.klocek@qt.io> ---- - chromium/net/quic/quic_chromium_client_session.cc | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/chromium/net/quic/quic_chromium_client_session.cc b/chromium/net/quic/quic_chromium_client_session.cc -index 6e08826bbb0d..4bca38bd10db 100644 ---- src/3rdparty/chromium/net/quic/quic_chromium_client_session.cc -+++ src/3rdparty/chromium/net/quic/quic_chromium_client_session.cc -@@ -500,7 +500,8 @@ int QuicChromiumClientSession::Handle::RequestStream( - const NetworkTrafficAnnotationTag& traffic_annotation) { - DCHECK(!stream_request_); - -- if (!session_) -+ // TODO(crbug.com/41491379): Add a regression test. -+ if (!session_ || session_->going_away_) - return ERR_CONNECTION_CLOSED; - - requires_confirmation |= session_->gquic_zero_rtt_disabled(); -From 28c3af39d3bdaea88865f901d19862bf7d44199d Mon Sep 17 00:00:00 2001 -From: Pete Williamson <petewil@chromium.org> -Date: Tue, 27 Feb 2024 00:19:05 +0000 -Subject: [PATCH] [Backport] Security bug 40940917 - -Cherry-pick of patch originally reviewed on -https://chromium-review.googlesource.com/c/chromium/src/+/5293726: -Fix misalligned address in hunspell::NodeReader::ReaderForLookupAt - -With the Hunspell spell checking library, we are using a custom wrapper -to read the dictionaries from files. In that custom wrapper, we were -reading by using reinterpret_cast to interpret an offset into a pointer, -and then reading the bytes at that pointer for the child_offset. - -The spell checking code appears to have been working properly in the -field. However, the current code caused fuzzing test failures, and -those failures are blocking other tests, so we need to fix this to -unblock other tests. - -It turns out that we were casting a value to a pointer that did not -have proper alignment (for instance, a pointer to a 32 bit int needs -to be 4 byte allinged, but this pointer was not). While it has often -worked in older compilers, it turns out this is undefined behavior. - -Instead of relying on undefined behavior, the right thing to do is to -use std::memcpy to copy the bytes from the misalligned address into -their final destination (either an int32 or an int16 in this case). - -Bug: 40940917 -Change-Id: I8aeba9ee8000b51e98863813235d8dceb1c41ceb -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5293726 -Commit-Queue: Peter Williamson <petewil@chromium.org> -Reviewed-by: Trevor Perrier <perrier@chromium.org> -Cr-Commit-Position: refs/heads/main@{#1265552} -Reviewed-on: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/560663 -Reviewed-by: Michal Klocek <michal.klocek@qt.io> ---- - .../hunspell/google/bdict_reader.cc | 27 ++++++++++++++----- - 1 file changed, 21 insertions(+), 6 deletions(-) - -diff --git a/chromium/third_party/hunspell/google/bdict_reader.cc b/chromium/third_party/hunspell/google/bdict_reader.cc -index 70416a7c9048..70e4d4977ad5 100644 ---- src/3rdparty/chromium/third_party/hunspell/google/bdict_reader.cc -+++ src/3rdparty/chromium/third_party/hunspell/google/bdict_reader.cc -@@ -5,6 +5,8 @@ - #include "third_party/hunspell/google/bdict_reader.h" - - #include <stdint.h> -+#include <cstdint> -+#include <cstring> - - #include "base/check.h" - -@@ -413,19 +415,32 @@ NodeReader::FindResult NodeReader::ReaderForLookupAt( - if (index >= static_cast<size_t>(lookup_num_chars()) || !is_valid_) - return FIND_DONE; - -- size_t child_offset; -+ size_t child_offset = 0; - if (is_lookup_32()) { - // Table contains 32-bit absolute offsets. -- child_offset = -- reinterpret_cast<const unsigned int*>(table_begin)[index]; -+ -+ // We need to use memcpy here instead of just casting the offset into a -+ // pointer to an int because the cast can cause undefined behavior if -+ // the pointer is not alligned, and in this case it is not. -+ int byte_offset = index * sizeof(uint32_t); -+ std::memcpy(&child_offset, -+ reinterpret_cast<const void*>(table_begin + byte_offset), -+ sizeof(uint32_t)); - if (!child_offset) - return FIND_NOTHING; // This entry in the table is empty. - } else { - // Table contains 16-bit offsets relative to the current node. -- child_offset = -- reinterpret_cast<const unsigned short*>(table_begin)[index]; -- if (!child_offset) -+ -+ // We need to use memcpy here instead of just casting the offset into a -+ // pointer to an int because the cast can cause undefined behavior if -+ // the pointer is not alligned, and in this case it is not. -+ int byte_offset = index * sizeof(uint16_t); -+ std::memcpy(&child_offset, -+ reinterpret_cast<const void*>(table_begin + byte_offset), -+ sizeof(uint16_t)); -+ if (!child_offset) { - return FIND_NOTHING; // This entry in the table is empty. -+ } - child_offset += node_offset_; - } - -From b4d43a76e4c334084400402c09620ef24870704e Mon Sep 17 00:00:00 2001 -From: Shahbaz Youssefi <syoussefi@chromium.org> -Date: Mon, 8 Apr 2024 10:14:45 -0400 -Subject: [PATCH] [Backport] CVE-2024-4058: Type Confusion in ANGLE - -Partial manual cherry-pick of patch originally reviewed on -https://chromium-review.googlesource.com/c/angle/angle/+/5466390: -SPIR-V: Fix const constructors with single scalar - -These constructors may be generated because of -RemoveArrayLengthTraverser. - -Bug: chromium:332546345 -Change-Id: I2b2bf3728ef5bae148abc2a8518f8f3f42850025 -Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5462388 -(cherry picked from commit 0b776d32f69a932acb61963d9daad9e13f610944) -Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5466390 -Commit-Queue: Zakhar Voit <voit@google.com> -Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> -Reviewed-by: Geoff Lang <geofflang@chromium.org> -Reviewed-on: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/560664 -Reviewed-by: Michal Klocek <michal.klocek@qt.io> ---- - .../third_party/angle/src/compiler/translator/Compiler.cpp | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/chromium/third_party/angle/src/compiler/translator/Compiler.cpp b/chromium/third_party/angle/src/compiler/translator/Compiler.cpp -index 27975887086a..435d3b41b3a3 100644 ---- src/3rdparty/chromium/third_party/angle/src/compiler/translator/Compiler.cpp -+++ src/3rdparty/chromium/third_party/angle/src/compiler/translator/Compiler.cpp -@@ -757,6 +757,11 @@ bool TCompiler::checkAndSimplifyAST(TIntermBlock *root, - { - return false; - } -+ // Fold the expressions again, because |RemoveArrayLengthMethod| can introduce new constants. -+ if (!FoldExpressions(this, root, &mDiagnostics)) -+ { -+ return false; -+ } - - if (!RemoveUnreferencedVariables(this, root, &mSymbolTable)) - { -From dceba69334080559303f92fc4a6c6d01e7dcd00c Mon Sep 17 00:00:00 2001 -From: Brendon Tiszka <tiszka@chromium.org> -Date: Sun, 3 Mar 2024 21:30:59 +0100 -Subject: [PATCH] [Backport] Security bug 327698060 - -Manual cherry-pick of patch originally reviewed on -https://chromium-review.googlesource.com/c/chromium/src/+/5337387: -PaintOpReader: Harden PaintImage deserialization - -Add missing validity check after `Read` - -Bug: 327698060 -Change-Id: I0aa5120296009998af3235a01304a1f597a82a33 -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5337387 -Commit-Queue: Khushal Sagar <khushalsagar@chromium.org> -Reviewed-by: Khushal Sagar <khushalsagar@chromium.org> -Cr-Commit-Position: refs/heads/main@{#1267636} -Reviewed-on: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/560665 -Reviewed-by: Michal Klocek <michal.klocek@qt.io> -Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> ---- - chromium/cc/paint/paint_op_reader.cc | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/chromium/cc/paint/paint_op_reader.cc b/chromium/cc/paint/paint_op_reader.cc -index 0979f6630175..b6a9d8ca3641 100644 ---- src/3rdparty/chromium/cc/paint/paint_op_reader.cc -+++ src/3rdparty/chromium/cc/paint/paint_op_reader.cc -@@ -309,6 +309,10 @@ void PaintOpReader::Read(PaintImage* image) { - case PaintOp::SerializedImageType::kImageData: { - SkColorType color_type; - Read(&color_type); -+ if (!valid_) { -+ return; -+ } -+ - uint32_t width; - Read(&width); - uint32_t height; -From 2b188075ed5f01cc9c09b5273b5e6177d7252a0e Mon Sep 17 00:00:00 2001 -From: Geoff Lang <geofflang@chromium.org> -Date: Mon, 29 Apr 2024 15:27:36 -0400 -Subject: [PATCH] [Backport] CVE-2024-4558: Use after free in ANGLE - -Manual cherry-pick of patch originally reviewed on -https://chromium-review.googlesource.com/c/angle/angle/+/5498735: -GL: Sync unpack state for glCompressedTexSubImage3D - -Unpack state is supposed to be ignored for compressed tex image calls -but some drivers use it anyways and read incorrect data. - -Texture3DTestES3.PixelUnpackStateTexSubImage covers this case. - -Bug: chromium:337766133 -Change-Id: Ic11a056113b1850bd5b4d6840527164a12849a22 -Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5498735 -Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> - -Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> -Change-Id: I0736ceb1e3165f571358ae06a0287b3f5a98d425 -Reviewed-on: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/560666 -Reviewed-by: Michal Klocek <michal.klocek@qt.io> ---- - .../third_party/angle/src/libANGLE/renderer/gl/TextureGL.cpp | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/chromium/third_party/angle/src/libANGLE/renderer/gl/TextureGL.cpp b/chromium/third_party/angle/src/libANGLE/renderer/gl/TextureGL.cpp -index 035d4520b13b..0cfd21621bb3 100644 ---- src/3rdparty/chromium/third_party/angle/src/libANGLE/renderer/gl/TextureGL.cpp -+++ src/3rdparty/chromium/third_party/angle/src/libANGLE/renderer/gl/TextureGL.cpp -@@ -579,6 +579,7 @@ angle::Result TextureGL::setCompressedSubImage(const gl::Context *context, - nativegl::GetCompressedSubTexImageFormat(functions, features, format); - - stateManager->bindTexture(getType(), mTextureID); -+ ANGLE_TRY(stateManager->setPixelUnpackState(context, unpack)); - if (nativegl::UseTexImage2D(getType())) - { - ASSERT(area.z == 0 && area.depth == 1); -From d553c9366aedad5701852427f8e1910381c4ff8b Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marja=20H=C3=B6ltt=C3=A4?= <marja@google.com> -Date: Tue, 26 Mar 2024 13:53:21 +0000 -Subject: [PATCH] [Backport] CVE-2024-3914: Use after free in V8 (1/2) -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Manual backport of patch originally reviewed on -https://chromium-review.googlesource.com/c/chromium/src/+/5387887: -[M120-LTS] Fix DOMArrayBuffer::IsDetached() - -M120 merge issues: - third_party/blink/renderer/core/typed_arrays/dom_array_buffer.cc: - - Conflicting types for variable worlds - - Conflicting AllWorldsInIsolate() call (M120 doesn't use the last argument) - -A DOMArrayBuffer was maintaining its own "is_detached_" state, and -would consider itself non-detached even if the corresponding -JSArrayBuffer (or, all of them, in case there are several) was -detached. - -Piping in the v8::Isolate would be a too big change for this fix, so this is using v8::Isolate::GetCurrent() for now. - -Bug: 330759272 -Change-Id: I1e98ebd2066d2e59658db12f1bb419b6ebc1d706 -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5387887 -Commit-Queue: Marja Hölttä <marja@chromium.org> -Cr-Commit-Position: refs/heads/main@{#1278283} -Reviewed-on: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/562706 -Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> ---- - .../core/typed_arrays/dom_array_buffer.cc | 50 +++++++++++++++++++ - .../core/typed_arrays/dom_array_buffer.h | 13 +++++ - .../core/typed_arrays/dom_array_buffer_base.h | 2 +- - 3 files changed, 64 insertions(+), 1 deletion(-) - -diff --git a/chromium/third_party/blink/renderer/core/typed_arrays/dom_array_buffer.cc b/chromium/third_party/blink/renderer/core/typed_arrays/dom_array_buffer.cc -index c456d15f2f50..38dcd3a35737 100644 ---- src/3rdparty/chromium/third_party/blink/renderer/core/typed_arrays/dom_array_buffer.cc -+++ src/3rdparty/chromium/third_party/blink/renderer/core/typed_arrays/dom_array_buffer.cc -@@ -18,6 +18,15 @@ static void AccumulateArrayBuffersForAllWorlds( - v8::Isolate* isolate, - DOMArrayBuffer* object, - Vector<v8::Local<v8::ArrayBuffer>, 4>& buffers) { -+ if (!object->has_non_main_world_wrappers() && IsMainThread()) { -+ const DOMWrapperWorld& world = DOMWrapperWorld::MainWorld(); -+ v8::Local<v8::Object> wrapper = world.DomDataStore().Get(object, isolate); -+ if (!wrapper.IsEmpty()) { -+ buffers.push_back(v8::Local<v8::ArrayBuffer>::Cast(wrapper)); -+ } -+ return; -+ } -+ - Vector<scoped_refptr<DOMWrapperWorld>> worlds; - DOMWrapperWorld::AllWorldsInCurrentThread(worlds); - for (const auto& world : worlds) { -@@ -155,6 +164,47 @@ DOMArrayBuffer* DOMArrayBuffer::Create( - return Create(std::move(contents)); - } - -+bool DOMArrayBuffer::IsDetached() const { -+ if (contents_.BackingStore() == nullptr) { -+ return is_detached_; -+ } -+ if (is_detached_) { -+ return true; -+ } -+ -+ v8::Isolate* isolate = v8::Isolate::GetCurrent(); -+ v8::HandleScope handle_scope(isolate); -+ Vector<v8::Local<v8::ArrayBuffer>, 4> buffer_handles; -+ AccumulateArrayBuffersForAllWorlds(isolate, const_cast<DOMArrayBuffer*>(this), buffer_handles); -+ -+ // There may be several v8::ArrayBuffers corresponding to the DOMArrayBuffer, -+ // but at most one of them may be non-detached. -+ int nondetached_count = 0; -+ int detached_count = 0; -+ -+ for (const auto& buffer_handle : buffer_handles) { -+ if (buffer_handle->WasDetached()) { -+ ++detached_count; -+ } else { -+ ++nondetached_count; -+ } -+ } -+ CHECK_LE(nondetached_count, 1); -+ -+ return nondetached_count == 0 && detached_count > 0; -+} -+ -+v8::Local<v8::Object> DOMArrayBuffer::AssociateWithWrapper( -+ v8::Isolate* isolate, -+ const WrapperTypeInfo* wrapper_type_info, -+ v8::Local<v8::Object> wrapper) { -+ if (!DOMWrapperWorld::Current(isolate).IsMainWorld()) { -+ has_non_main_world_wrappers_ = true; -+ } -+ return ScriptWrappable::AssociateWithWrapper(isolate, wrapper_type_info, -+ wrapper); -+} -+ - DOMArrayBuffer* DOMArrayBuffer::Slice(size_t begin, size_t end) const { - begin = std::min(begin, ByteLengthAsSizeT()); - end = std::min(end, ByteLengthAsSizeT()); -diff --git a/chromium/third_party/blink/renderer/core/typed_arrays/dom_array_buffer.h b/chromium/third_party/blink/renderer/core/typed_arrays/dom_array_buffer.h -index e9a85d38d4d4..b1820dfa8408 100644 ---- src/3rdparty/chromium/third_party/blink/renderer/core/typed_arrays/dom_array_buffer.h -+++ src/3rdparty/chromium/third_party/blink/renderer/core/typed_arrays/dom_array_buffer.h -@@ -79,8 +79,21 @@ class CORE_EXPORT DOMArrayBuffer final : public DOMArrayBufferBase { - v8::Local<v8::Value> Wrap(v8::Isolate*, - v8::Local<v8::Object> creation_context) override; - -+ bool IsDetached() const override; -+ -+ v8::Local<v8::Object> AssociateWithWrapper( -+ v8::Isolate* isolate, -+ const WrapperTypeInfo* wrapper_type_info, -+ v8::Local<v8::Object> wrapper) override; -+ -+ bool has_non_main_world_wrappers() const { -+ return has_non_main_world_wrappers_; -+ } -+ - private: - bool TransferDetachable(v8::Isolate*, ArrayBufferContents& result); -+ -+ bool has_non_main_world_wrappers_ = false; - }; - - } // namespace blink -diff --git a/chromium/third_party/blink/renderer/core/typed_arrays/dom_array_buffer_base.h b/chromium/third_party/blink/renderer/core/typed_arrays/dom_array_buffer_base.h -index e99cce60dd7f..3ae9a4360e85 100644 ---- src/3rdparty/chromium/third_party/blink/renderer/core/typed_arrays/dom_array_buffer_base.h -+++ src/3rdparty/chromium/third_party/blink/renderer/core/typed_arrays/dom_array_buffer_base.h -@@ -33,7 +33,7 @@ class CORE_EXPORT DOMArrayBufferBase : public ScriptWrappable { - return base::checked_cast<unsigned>(contents_.DataLength()); - } - -- bool IsDetached() const { return is_detached_; } -+ virtual bool IsDetached() const { return is_detached_; } - - void Detach() { is_detached_ = true; } - -From efda8125f55049957e196995dffafb6dc171eadf Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Marja=20H=C3=B6ltt=C3=A4?= <marja@google.com> -Date: Thu, 4 Apr 2024 09:43:42 +0200 -Subject: [PATCH] [Backport] CVE-2024-3914: Use after free in V8 (2/2) -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Manual cherry-pick of patch originally reviewed on -https://chromium-review.googlesource.com/c/chromium/src/+/5419329: -[M120-LTS] Comment out a CHECK that a DOMAB has maximally one non-detached JSAB - -Based on crash reports, this assumption is not true and has to be -investigated. - -Removing this newly introduced CHECK to be able to merge fixes in this -area - we still violate this invariant but the fixes are a step into -the right direction. - -Fix in question: -https://chromium-review.googlesource.com/5387887 -which also introduced this CHECK. - -Bug: 330759272 -Change-Id: I4ba52fee7ed8f45e352efd347e87df03d896ac3d -Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5419329 -Commit-Queue: Marja Hölttä <marja@chromium.org> -Cr-Commit-Position: refs/heads/main@{#1282379} -Reviewed-on: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/562707 -Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> ---- - .../blink/renderer/core/typed_arrays/dom_array_buffer.cc | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/chromium/third_party/blink/renderer/core/typed_arrays/dom_array_buffer.cc b/chromium/third_party/blink/renderer/core/typed_arrays/dom_array_buffer.cc -index 38dcd3a3573..69e332272dd 100644 ---- src/3rdparty/chromium/third_party/blink/renderer/core/typed_arrays/dom_array_buffer.cc -+++ src/3rdparty/chromium/third_party/blink/renderer/core/typed_arrays/dom_array_buffer.cc -@@ -189,7 +189,11 @@ bool DOMArrayBuffer::IsDetached() const { - ++nondetached_count; - } - } -- CHECK_LE(nondetached_count, 1); -+ // This CHECK fires even though it should not. TODO(330759272): Investigate -+ // under which conditions we end up with multiple non-detached JSABs for the -+ // same DOMAB and potentially restore this check. -+ -+ // CHECK_LE(nondetached_count, 1); - - return nondetached_count == 0 && detached_count > 0; - } -From 91b3c705d739f6b6c58da6133e8e818e06dfcaa3 Mon Sep 17 00:00:00 2001 -From: Victor Gomes <victorgomes@chromium.org> -Date: Thu, 21 Mar 2024 09:59:19 +0100 -Subject: [PATCH] [Backport] Security bug 329699609 - -Manual backport of patch originally reviewed on -https://chromium-review.googlesource.com/c/v8/v8/+/5378286: -Deal with large strings in NoSideEffectsErrorToString - -If name is too big, StringBuilder will fail to even add -"<a very large string>" suffix. - -In this case, we truncate name first. - -Bug: 329699609 -Change-Id: I6e4440c07eae84371f44b54f88127e2c70af0db5 -Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/5378286 -Commit-Queue: Victor Gomes <victorgomes@chromium.org> -Reviewed-by: Patrick Thier <pthier@chromium.org> -Auto-Submit: Victor Gomes <victorgomes@chromium.org> -Cr-Commit-Position: refs/heads/main@{#92932} -Reviewed-on: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/562708 -Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io> ---- - chromium/v8/src/objects/objects.cc | 25 +++++++++++++++++++------ - 1 file changed, 19 insertions(+), 6 deletions(-) - -diff --git a/chromium/v8/src/objects/objects.cc b/chromium/v8/src/objects/objects.cc -index 7b38609e347..7820c7e8e58 100644 ---- src/3rdparty/chromium/v8/src/objects/objects.cc -+++ src/3rdparty/chromium/v8/src/objects/objects.cc -@@ -425,14 +425,27 @@ Handle<String> NoSideEffectsErrorToString(Isolate* isolate, - if (name_str->length() == 0) return msg_str; - if (msg_str->length() == 0) return name_str; - -- IncrementalStringBuilder builder(isolate); -- builder.AppendString(name_str); -- builder.AppendCString(": "); -+ constexpr const char error_suffix[] = "<a very large string>"; -+ constexpr int error_suffix_size = sizeof(error_suffix); -+ int suffix_size = std::min(error_suffix_size, msg_str->length()); - -- if (builder.Length() + msg_str->length() <= String::kMaxLength) { -- builder.AppendString(msg_str); -+ IncrementalStringBuilder builder(isolate); -+ if (name_str->length() + suffix_size + 2 /* ": " */ > String::kMaxLength) { -+ constexpr const char connector[] = "... : "; -+ int connector_size = sizeof(connector); -+ Handle<String> truncated_name = isolate->factory()->NewProperSubString( -+ name_str, 0, name_str->length() - error_suffix_size - connector_size); -+ builder.AppendString(truncated_name); -+ builder.AppendCString(connector); -+ builder.AppendCString(error_suffix); - } else { -- builder.AppendCString("<a very large string>"); -+ builder.AppendString(name_str); -+ builder.AppendCString(": "); -+ if (builder.Length() + msg_str->length() <= String::kMaxLength) { -+ builder.AppendString(msg_str); -+ } else { -+ builder.AppendCString(error_suffix); -+ } - } - - return builder.Finish().ToHandleChecked(); -From d3cb500c1d4b0508f3f21bb568c095984c614fcf Mon Sep 17 00:00:00 2001 -From: "Jason E. Hale" <jhale@FreeBSD.org> -Date: Thu, 20 Jun 2024 23:42:33 -0400 -Subject: [PATCH] [Backport] Fixup CVE-2024-3914: Use after free in V8 (1/2) - -Manual backport of requisite method WasDetached() in V8. ---- - chromium/v8/include/v8.h | 8 ++++++++ - chromium/v8/src/api/api.cc | 4 ++++ - 2 files changed, 12 insertions(+) - -diff --git a/chromium/v8/include/v8.h b/chromium/v8/include/v8.h -index 32687d90b5f..8a1b437bb06 100644 ---- src/3rdparty/chromium/v8/include/v8.h -+++ src/3rdparty/chromium/v8/include/v8.h -@@ -5299,6 +5299,11 @@ class V8_EXPORT ArrayBuffer : public Object { - */ - bool IsDetachable() const; - -+ /** -+ * Returns true if this ArrayBuffer has been detached. -+ */ -+ bool WasDetached() const; -+ - /** - * Detaches this ArrayBuffer and all its views (typed arrays). - * Detaching sets the byte length of the buffer and all typed arrays to zero, -@@ -5349,6 +5354,9 @@ class V8_EXPORT ArrayBuffer : public Object { - * should not attempt to manage lifetime of the storage through other means. - * - * This function replaces both Externalize() and GetContents(). -+ * -+ * The returned shared pointer will not be empty, even if the ArrayBuffer has -+ * been detached. Use |WasDetached| to tell if it has been detached instead. - */ - std::shared_ptr<BackingStore> GetBackingStore(); - -diff --git a/chromium/v8/src/api/api.cc b/chromium/v8/src/api/api.cc -index b6f9d12769e..05d31a7cedf 100644 ---- src/3rdparty/chromium/v8/src/api/api.cc -+++ src/3rdparty/chromium/v8/src/api/api.cc -@@ -7386,6 +7386,10 @@ bool v8::ArrayBuffer::IsDetachable() const { - return Utils::OpenHandle(this)->is_detachable(); - } - -+bool v8::ArrayBuffer::WasDetached() const { -+ return Utils::OpenHandle(this)->was_detached(); -+} -+ - namespace { - // The backing store deleter just deletes the indirection, which downrefs - // the shared pointer. It will get collected normally. |