Skip to content

Commit ba310ee

Browse files
dtigmibrunin
authored andcommitted
[Backport] CVE-2021-21148: Heap buffer overflow in V8
Manual backport of patch originally reviewed on https://chromium-review.googlesource.com/c/v8/v8/+/2674169: [Merged ][wasm] PostMessage of Memory.buffer should throw PostMessage of an ArrayBuffer that is not detachable should result in a DataCloneError. [email protected] (cherry picked from commit dfcf1e86fac0a7b067caf8fdfc13eaf3e3f445e4) Bug: chromium:1170176, chromium:961059 No-Try: true No-Presubmit: true No-Tree-Checks: true Change-Id: Ife852df032841b7001375acd5e101d614c4b0771 Reviewed-by: Zhi An Ng <[email protected]> Commit-Queue: Zhi An Ng <[email protected]> Cr-Commit-Position: refs/branch-heads/8.8@{#30} Cr-Branched-From: 2dbcdc105b963ee2501c82139eef7e0603977ff0-refs/heads/8.8.278@{#1} Cr-Branched-From: 366d30c99049b3f1c673f8a93deb9f879d0fa9f0-refs/heads/master@{#71094} Reviewed-by: Michal Klocek <[email protected]>
1 parent bdb7d20 commit ba310ee

File tree

2 files changed

+8
-0
lines changed

2 files changed

+8
-0
lines changed

chromium/v8/src/messages.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -751,6 +751,8 @@ class ErrorUtils : public AllStatic {
751751
T(DataCloneErrorOutOfMemory, "Data cannot be cloned, out of memory.") \
752752
T(DataCloneErrorNeuteredArrayBuffer, \
753753
"An ArrayBuffer is neutered and could not be cloned.") \
754+
T(DataCloneErrorNonNeuterableArrayBuffer, \
755+
"ArrayBuffer is not neuterable and could not be cloned.") \
754756
T(DataCloneErrorSharedArrayBufferTransferred, \
755757
"A SharedArrayBuffer could not be cloned. SharedArrayBuffer must not be " \
756758
"transferred.") \

chromium/v8/src/value-serializer.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -824,6 +824,12 @@ Maybe<bool> ValueSerializer::WriteJSArrayBuffer(
824824
return ThrowIfOutOfMemory();
825825
}
826826

827+
if (!array_buffer->is_neuterable()) {
828+
ThrowDataCloneError(
829+
MessageTemplate::kDataCloneErrorNonNeuterableArrayBuffer);
830+
return Nothing<bool>();
831+
}
832+
827833
uint32_t* transfer_entry = array_buffer_transfer_map_.Find(array_buffer);
828834
if (transfer_entry) {
829835
WriteTag(SerializationTag::kArrayBufferTransfer);

0 commit comments

Comments
 (0)