Commit 9a8e269a authored by bmeurer's avatar bmeurer Committed by Commit bot

[turbofan] Maintain the invariant to never inline cross native context.

In the JSCallReducer we'd inline certain builtins like the Array
constructor or Function builtins across native contexts, which at
this point should be mostly safe, but might lead to cross context
leaks in the future (as it's not obvious that the JSCallReducer)
doesn't maintain this invariant. So better safe than sorry.

R=yangguo@chromium.org
BUG=v8:5267

Review-Url: https://codereview.chromium.org/2651133002
Cr-Commit-Position: refs/heads/master@{#42643}
parent bc1117ac
...@@ -407,6 +407,9 @@ Reduction JSCallReducer::ReduceJSCallFunction(Node* node) { ...@@ -407,6 +407,9 @@ Reduction JSCallReducer::ReduceJSCallFunction(Node* node) {
return Changed(node); return Changed(node);
} }
// Don't inline cross native context.
if (function->native_context() != *native_context()) return NoChange();
// Check for known builtin functions. // Check for known builtin functions.
switch (shared->code()->builtin_index()) { switch (shared->code()->builtin_index()) {
case Builtins::kFunctionPrototypeApply: case Builtins::kFunctionPrototypeApply:
...@@ -569,6 +572,9 @@ Reduction JSCallReducer::ReduceJSCallConstruct(Node* node) { ...@@ -569,6 +572,9 @@ Reduction JSCallReducer::ReduceJSCallConstruct(Node* node) {
return Changed(node); return Changed(node);
} }
// Don't inline cross native context.
if (function->native_context() != *native_context()) return NoChange();
// Check for the ArrayConstructor. // Check for the ArrayConstructor.
if (*function == function->native_context()->array_function()) { if (*function == function->native_context()->array_function()) {
// Check if we have an allocation site. // Check if we have an allocation site.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment