|
| 1 | +Upstream-Status: Backport |
| 2 | + |
| 3 | +This is a fix for CVE-2021-21148. |
| 4 | +See https://chromereleases.googleblog.com/2021/02/stable-channel-update-for-desktop_4.html |
| 5 | +for more details. |
| 6 | + |
| 7 | +Signed-off-by: Maksim Sisov <msisov@igalia.com> |
| 8 | +--- |
| 9 | +From dfcf1e86fac0a7b067caf8fdfc13eaf3e3f445e4 Mon Sep 17 00:00:00 2001 |
| 10 | +From: Deepti Gandluri <gdeepti@chromium.org> |
| 11 | +Date: Wed, 27 Jan 2021 22:19:44 -0800 |
| 12 | +Subject: [PATCH] [wasm] PostMessage of Memory.buffer should throw |
| 13 | + |
| 14 | +PostMessage of an ArrayBuffer that is not detachable should result |
| 15 | +in a DataCloneError. |
| 16 | + |
| 17 | +Bug: chromium:1170176, chromium:961059 |
| 18 | +Change-Id: Ib89bbc10d2b58918067fd1a90365cad10a0db9ec |
| 19 | +Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2653810 |
| 20 | +Reviewed-by: Adam Klein <adamk@chromium.org> |
| 21 | +Reviewed-by: Andreas Haas <ahaas@chromium.org> |
| 22 | +Commit-Queue: Deepti Gandluri <gdeepti@chromium.org> |
| 23 | +Cr-Commit-Position: refs/heads/master@{#72415} |
| 24 | +--- |
| 25 | + src/common/message-template.h | 2 ++ |
| 26 | + src/objects/value-serializer.cc | 5 +++++ |
| 27 | + 2 files changed, 7 insertions(+) |
| 28 | + |
| 29 | +diff --git a/v8/src/common/message-template.h b/v8/src/common/message-template.h |
| 30 | +index f0f4b61..c8ff902 100644 |
| 31 | +--- a/v8/src/common/message-template.h |
| 32 | ++++ b/v8/src/common/message-template.h |
| 33 | +@@ -580,6 +580,8 @@ namespace internal { |
| 34 | + T(DataCloneErrorOutOfMemory, "Data cannot be cloned, out of memory.") \ |
| 35 | + T(DataCloneErrorDetachedArrayBuffer, \ |
| 36 | + "An ArrayBuffer is detached and could not be cloned.") \ |
| 37 | ++ T(DataCloneErrorNonDetachableArrayBuffer, \ |
| 38 | ++ "ArrayBuffer is not detachable and could not be cloned.") \ |
| 39 | + T(DataCloneErrorSharedArrayBufferTransferred, \ |
| 40 | + "A SharedArrayBuffer could not be cloned. SharedArrayBuffer must not be " \ |
| 41 | + "transferred.") \ |
| 42 | +diff --git a/v8/src/objects/value-serializer.cc b/v8/src/objects/value-serializer.cc |
| 43 | +index 3df1bb1..d5f5f05 100644 |
| 44 | +--- a/v8/src/objects/value-serializer.cc |
| 45 | ++++ b/v8/src/objects/value-serializer.cc |
| 46 | +@@ -864,6 +864,11 @@ Maybe<bool> ValueSerializer::WriteJSArrayBuffer( |
| 47 | + WriteVarint(index.FromJust()); |
| 48 | + return ThrowIfOutOfMemory(); |
| 49 | + } |
| 50 | ++ if (!array_buffer->is_detachable()) { |
| 51 | ++ ThrowDataCloneError( |
| 52 | ++ MessageTemplate::kDataCloneErrorNonDetachableArrayBuffer); |
| 53 | ++ return Nothing<bool>(); |
| 54 | ++ } |
| 55 | + |
| 56 | + uint32_t* transfer_entry = array_buffer_transfer_map_.Find(array_buffer); |
| 57 | + if (transfer_entry) { |
| 58 | +-- |
| 59 | +2.27.0 |
| 60 | + |
0 commit comments