Skip to content

Commit 9827f0c

Browse files
Artem Sumaneevmibrunin
Artem Sumaneev
authored andcommitted
[Backport] Security bug 1195331
Reland "M86-LTS: [const-tracking] Ensure map is updated before generalizing constness" This reverts commit 4b4ad58888faf938a76e0d792c3c3a639c79e2e4. M86 merge conflicts and resolution: * src/objects/map-updater.cc Map::instance_descriptor with kRelaxedLoad dispatcher was introduced after 8.6 branch: https://crrev.com/c/2424130. Before the patch Map::instance_descriptor without distpacher was used. Do the same here. * test/mjsunit/regress/regress-crbug-1195331.js HasOwnConstDataProperty did not exist in 8.6. Add it from https://crrev.com/c/2566757. Original change's description: > Revert "M86-LTS: [const-tracking] Ensure map is updated before generalizing constness" > > This reverts commit 69a043b410ff83f31ceba23eab410163403c1db0. > > Reason for revert: causes compilation errors. kRelaxedLoad is missing. > > Original change's description: > > M86-LTS: [const-tracking] Ensure map is updated before generalizing constness > > > > Revision: db2acd7a046d42a8013da76c3f47d2970cef5447 > > > > BUG=chromium:1195331 > > NOTRY=true > > NOPRESUBMIT=true > > NOTREECHECKS=true > > R=​​[email protected] > > > > (cherry picked from commit 5a0dd788cdae65bbfa37fbbd47a5e5dde15dd894) > > > > Change-Id: I7ce1b36b8860a49838d208bc7857021e03f83916 > > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2831474 > > Reviewed-by: Leszek Swirski <[email protected]> > > Cr-Original-Commit-Position: refs/branch-heads/9.0@{#37} > > Cr-Original-Branched-From: bd0108b4c88e0d6f2350cb79b5f363fbd02f3eb7-refs/heads/9.0.257@{#1} > > Cr-Original-Branched-From: 349bcc6a075411f1a7ce2d866c3dfeefc2efa39d-refs/heads/master@{#73001} > > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2850705 > > Reviewed-by: Igor Sheludko <[email protected]> > > Reviewed-by: Victor-Gabriel Savu <[email protected]> > > Commit-Queue: Artem Sumaneev <[email protected]> > > Cr-Commit-Position: refs/branch-heads/8.6@{#82} > > Cr-Branched-From: a64aed2333abf49e494d2a5ce24bbd14fff19f60-refs/heads/8.6.395@{#1} > > Cr-Branched-From: a626bc036236c9bf92ac7b87dc40c9e538b087e3-refs/heads/master@{#69472} > > Bug: chromium:1195331 > Change-Id: Id7170c30d67329b784e9a283c0171fed010970dc > No-Presubmit: true > No-Tree-Checks: true > No-Try: true > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2853588 > Bot-Commit: Rubber Stamper <[email protected]> > Commit-Queue: Artem Sumaneev <[email protected]> > Cr-Commit-Position: refs/branch-heads/8.6@{#84} > Cr-Branched-From: a64aed2333abf49e494d2a5ce24bbd14fff19f60-refs/heads/8.6.395@{#1} > Cr-Branched-From: a626bc036236c9bf92ac7b87dc40c9e538b087e3-refs/heads/master@{#69472} No-Presubmit: true No-Tree-Checks: true No-Try: true Bug: chromium:1195331 Change-Id: Ie103a7795893860c4c4834eefe9dc327c5c46d19 Reviewed-by: Victor-Gabriel Savu <[email protected]> Commit-Queue: Victor-Gabriel Savu <[email protected]> Cr-Commit-Position: refs/branch-heads/8.6@{#93} Cr-Branched-From: a64aed2333abf49e494d2a5ce24bbd14fff19f60-refs/heads/8.6.395@{#1} Cr-Branched-From: a626bc036236c9bf92ac7b87dc40c9e538b087e3-refs/heads/master@{#69472} Reviewed-by: Michal Klocek <[email protected]>
1 parent 96953e1 commit 9827f0c

File tree

3 files changed

+42
-4
lines changed

3 files changed

+42
-4
lines changed

chromium/v8/src/objects/map-updater.cc

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -135,11 +135,20 @@ Handle<Map> MapUpdater::ReconfigureToDataField(InternalIndex descriptor,
135135
if (old_details.constness() == PropertyConstness::kConst &&
136136
old_details.location() == kField &&
137137
old_details.attributes() != new_attributes_) {
138+
// Ensure we'll be updating constness of the up-to-date version of old_map_.
139+
Handle<Map> old_map = Map::Update(isolate_, old_map_);
140+
PropertyDetails details =
141+
old_map->instance_descriptors().GetDetails(descriptor);
138142
Handle<FieldType> field_type(
139-
old_descriptors_->GetFieldType(modified_descriptor_), isolate_);
140-
Map::GeneralizeField(isolate_, old_map_, descriptor,
141-
PropertyConstness::kMutable,
142-
old_details.representation(), field_type);
143+
old_map->instance_descriptors().GetFieldType(descriptor),
144+
isolate_);
145+
Map::GeneralizeField(isolate_, old_map, descriptor,
146+
PropertyConstness::kMutable, details.representation(),
147+
field_type);
148+
DCHECK_EQ(PropertyConstness::kMutable,
149+
old_map->instance_descriptors()
150+
.GetDetails(descriptor)
151+
.constness());
143152
// The old_map_'s property must become mutable.
144153
// Note, that the {old_map_} and {old_descriptors_} are not expected to be
145154
// updated by the generalization if the map is already deprecated.

chromium/v8/src/runtime/runtime-object.cc

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,34 @@ RUNTIME_FUNCTION(Runtime_ObjectHasOwnProperty) {
357357
return ReadOnlyRoots(isolate).false_value();
358358
}
359359

360+
RUNTIME_FUNCTION(Runtime_HasOwnConstDataProperty) {
361+
HandleScope scope(isolate);
362+
DCHECK_EQ(2, args.length());
363+
CONVERT_ARG_HANDLE_CHECKED(Object, object, 0);
364+
CONVERT_ARG_HANDLE_CHECKED(Object, property, 1);
365+
366+
bool success;
367+
LookupIterator::Key key(isolate, property, &success);
368+
if (!success) return ReadOnlyRoots(isolate).undefined_value();
369+
370+
if (object->IsJSObject()) {
371+
Handle<JSObject> js_obj = Handle<JSObject>::cast(object);
372+
LookupIterator it(isolate, js_obj, key, js_obj, LookupIterator::OWN);
373+
374+
switch (it.state()) {
375+
case LookupIterator::NOT_FOUND:
376+
return isolate->heap()->ToBoolean(false);
377+
case LookupIterator::DATA:
378+
return isolate->heap()->ToBoolean(it.constness() ==
379+
PropertyConstness::kConst);
380+
default:
381+
return ReadOnlyRoots(isolate).undefined_value();
382+
}
383+
}
384+
385+
return ReadOnlyRoots(isolate).undefined_value();
386+
}
387+
360388
RUNTIME_FUNCTION(Runtime_AddDictionaryProperty) {
361389
HandleScope scope(isolate);
362390
Handle<JSObject> receiver = args.at<JSObject>(0);

chromium/v8/src/runtime/runtime.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -487,6 +487,7 @@ namespace internal {
487487
F(HasElementsInALargeObjectSpace, 1, 1) \
488488
F(HasFastElements, 1, 1) \
489489
F(HasFastProperties, 1, 1) \
490+
F(HasOwnConstDataProperty, 2, 1) \
490491
F(HasFixedBigInt64Elements, 1, 1) \
491492
F(HasFixedBigUint64Elements, 1, 1) \
492493
F(HasFixedFloat32Elements, 1, 1) \

0 commit comments

Comments
 (0)