Skip to content

Commit 64e8ce7

Browse files
chcunninghammibrunin
authored andcommitted
[Backport] CVE-2021-21119: Use after free in Media
Manual backport of patch originally reviewed on https://chromium-review.googlesource.com/c/chromium/src/+/2606399: MediaCapabilities: Use threadsafe static wtf::String This replaces DEFINE_THREAD_SAFE_STATIC_LOCAL(const String, ...). StringImpl ref counting (behind that macro) is not currently threadsafe. (cherry picked from commit f9add3b8e53c440129f7be4a181a22c440e856bc) Bug: 1160534 Change-Id: I70f4aa796aaefabbee36db4fcdf0fbf0defe4959 Commit-Queue: Chrome Cunningham <[email protected]> Reviewed-by: Jeremy Roman <[email protected]> Auto-Submit: Chrome Cunningham <[email protected]> Cr-Original-Commit-Position: refs/heads/master@{#839863} Reviewed-by: Chrome Cunningham <[email protected]> Cr-Commit-Position: refs/branch-heads/4324@{#1460} Cr-Branched-From: c73b5a651d37a6c4d0b8e3262cc4015a5579c6c8-refs/heads/master@{#827102} Reviewed-by: Allan Sandfeld Jensen <[email protected]>
1 parent 25084e5 commit 64e8ce7

File tree

5 files changed

+31
-9
lines changed

5 files changed

+31
-9
lines changed

chromium/third_party/blink/renderer/modules/BUILD.gn

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,18 @@ config("modules_implementation") {
3434
}
3535
}
3636

37-
make_names("module_names") {
37+
make_names("indexed_db_names") {
3838
in_files = [ "indexeddb/indexed_db_names.json5" ]
3939
output_dir = blink_modules_output_dir
4040
deps = [] # Don't use default deps (otherwise it will be circular).
4141
}
4242

43+
make_names("media_capabilities_names") {
44+
in_files = [ "media_capabilities/media_capabilities_names.json5" ]
45+
output_dir = blink_modules_output_dir
46+
deps = [] # Don't use default deps (otherwise it will be circular).
47+
}
48+
4349
target("jumbo_" + modules_target_type, "modules") {
4450
output_name = "blink_modules"
4551

@@ -59,8 +65,9 @@ target("jumbo_" + modules_target_type, "modules") {
5965
"modules_initializer.h",
6066
]
6167

62-
# Compile sources generated by module_names script.
63-
sources += get_target_outputs(":module_names")
68+
# Compile sources generated by make_names script.
69+
sources += get_target_outputs(":indexed_db_names")
70+
sources += get_target_outputs(":media_capabilities_names")
6471

6572
sources += bindings_modules_v8_files
6673
sources += rebase_path(
@@ -81,8 +88,9 @@ target("jumbo_" + modules_target_type, "modules") {
8188
]
8289

8390
deps = [
91+
":indexed_db_names",
8492
":make_modules_generated",
85-
":module_names",
93+
":media_capabilities_names",
8694
"//third_party/blink/renderer/bindings/modules:generated",
8795
"//third_party/blink/renderer/bindings/modules/v8:bindings_modules_impl",
8896
"//third_party/blink/renderer/bindings/modules/v8:bindings_modules_origin_trial_features",
@@ -218,7 +226,8 @@ jumbo_source_set("modules_testing") {
218226

219227
group("make_modules_generated") {
220228
public_deps = [
221-
":module_names",
229+
":indexed_db_names",
230+
":media_capabilities_names",
222231
"//third_party/blink/renderer/bindings/modules:bindings_modules_generated",
223232
"//third_party/blink/renderer/core:core_event_interfaces",
224233
]
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
include_rules = [
22
"-third_party/blink/renderer/modules",
33
"+third_party/blink/renderer/modules/media_capabilities",
4+
"+third_party/blink/renderer/modules/media_capabilities_names.h",
45
]

chromium/third_party/blink/renderer/modules/media_capabilities/media_capabilities.cc

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#include "third_party/blink/renderer/modules/media_capabilities/media_configuration.h"
2222
#include "third_party/blink/renderer/modules/media_capabilities/media_decoding_configuration.h"
2323
#include "third_party/blink/renderer/modules/media_capabilities/media_encoding_configuration.h"
24+
#include "third_party/blink/renderer/modules/media_capabilities_names.h"
2425
#include "third_party/blink/renderer/platform/bindings/script_state.h"
2526
#include "third_party/blink/renderer/platform/bindings/v8_throw_exception.h"
2627
#include "third_party/blink/renderer/platform/network/parsed_content_type.h"
@@ -116,9 +117,9 @@ WebAudioConfiguration ToWebAudioConfiguration(
116117
DCHECK(parsed_content_type.IsValid());
117118
DCHECK(!parsed_content_type.GetParameters().HasDuplicatedNames());
118119

119-
DEFINE_STATIC_LOCAL(const String, codecs, ("codecs"));
120120
web_configuration.mime_type = parsed_content_type.MimeType().LowerASCII();
121-
web_configuration.codec = parsed_content_type.ParameterValueForName(codecs);
121+
web_configuration.codec = parsed_content_type.ParameterValueForName(
122+
MediaCapabilitiesNames::codecs);
122123

123124
// |channels| is optional and will be set to a null WebString if not present.
124125
web_configuration.channels = configuration.hasChannels()
@@ -144,9 +145,9 @@ WebVideoConfiguration ToWebVideoConfiguration(
144145
DCHECK(parsed_content_type.IsValid());
145146
DCHECK(!parsed_content_type.GetParameters().HasDuplicatedNames());
146147

147-
DEFINE_STATIC_LOCAL(const String, codecs, ("codecs"));
148148
web_configuration.mime_type = parsed_content_type.MimeType().LowerASCII();
149-
web_configuration.codec = parsed_content_type.ParameterValueForName(codecs);
149+
web_configuration.codec = parsed_content_type.ParameterValueForName(
150+
MediaCapabilitiesNames::codecs);
150151

151152
DCHECK(configuration.hasWidth());
152153
web_configuration.width = configuration.width();
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
metadata: {
3+
namespace: "MediaCapabilities",
4+
},
5+
6+
data: [
7+
"codecs",
8+
],
9+
}

chromium/third_party/blink/renderer/modules/modules_initializer.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
#include "third_party/blink/renderer/modules/indexeddb/inspector_indexed_db_agent.h"
6060
#include "third_party/blink/renderer/modules/installation/installation_service_impl.h"
6161
#include "third_party/blink/renderer/modules/installedapp/installed_app_controller.h"
62+
#include "third_party/blink/renderer/modules/media_capabilities_names.h"
6263
#include "third_party/blink/renderer/modules/media_controls/media_controls_impl.h"
6364
#include "third_party/blink/renderer/modules/mediastream/user_media_client.h"
6465
#include "third_party/blink/renderer/modules/mediastream/user_media_controller.h"
@@ -108,6 +109,7 @@ void ModulesInitializer::Initialize() {
108109
Document::RegisterEventFactory(EventModulesFactory::Create());
109110
ModuleBindingsInitializer::Init();
110111
IndexedDBNames::init();
112+
MediaCapabilitiesNames::init();
111113
AXObjectCache::Init(AXObjectCacheImpl::Create);
112114
DraggedIsolatedFileSystem::Init(
113115
DraggedIsolatedFileSystemImpl::PrepareForDataObject);

0 commit comments

Comments
 (0)