Skip to content

Commit 5ed2985

Browse files
committed
[MERGE #6447 @rajeshpeter] ChakraCore Servicing Update for 2020.05B
Merge pull request #6447 from rajeshpeter:servicing/2005 **Changes to address the following issues:** **[CVE-2020-1037]** Ensure JIT bails out when there is an object marked as temporary during an implicit call, to prevent objects stored on the stack to be used outside of the function. This is done by preventing removal of the Bailout instruction for that case during the DeadStore pass of GlobOpt. **[CVE-2020-1065]** A previous MSRC fix removes the body scope of an enclosing function when a nested function is declared in the param scope of that enclosing function. This an result in us calculating incorrect envIndex for any symbols captured from enclosing scopes if this skipped body scope appears in the frameDisplay being passed to the nested function. This fix addresses the issue by marking the parameter scope also as mustInstantiate = true so we end up computing the correct envIndex. This problem and the fix only triggers when the enclosing function's param and body scopes are merged so the param and body scopes will never appear together in the scope stack and as such will not mess up the envIndex.
2 parents 473286e + 7af2bf2 commit 5ed2985

File tree

4 files changed

+21
-3
lines changed

4 files changed

+21
-3
lines changed

Build/NuGet/.pack-version

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.11.18
1+
1.11.19

lib/Backend/GlobOptBailOut.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1204,7 +1204,8 @@ GlobOpt::IsImplicitCallBailOutCurrentlyNeeded(IR::Instr * instr, Value const * s
12041204
NeedBailOnImplicitCallForLiveValues(block, isForwardPass) ||
12051205
NeedBailOnImplicitCallForCSE(block, isForwardPass) ||
12061206
NeedBailOnImplicitCallWithFieldOpts(block->loop, hasLiveFields) ||
1207-
NeedBailOnImplicitCallForArrayCheckHoist(block, isForwardPass)
1207+
NeedBailOnImplicitCallForArrayCheckHoist(block, isForwardPass) ||
1208+
(instr->HasBailOutInfo() && (instr->GetBailOutKind() & IR::BailOutMarkTempObject) != 0)
12081209
) &&
12091210
(!instr->HasTypeCheckBailOut() && MayNeedBailOnImplicitCall(instr, src1Val, src2Val)))
12101211
{

lib/Common/ChakraCoreVersion.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
// ChakraCore version number definitions (used in ChakraCore binary metadata)
1818
#define CHAKRA_CORE_MAJOR_VERSION 1
1919
#define CHAKRA_CORE_MINOR_VERSION 11
20-
#define CHAKRA_CORE_PATCH_VERSION 18
20+
#define CHAKRA_CORE_PATCH_VERSION 19
2121
#define CHAKRA_CORE_VERSION_RELEASE_QFE 0 // Redundant with PATCH_VERSION. Keep this value set to 0.
2222

2323
// -------------

lib/Runtime/ByteCode/ScopeInfo.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,23 @@ namespace Js
194194
ScopeInfo * scopeInfo = ScopeInfo::SaveScopeInfo(byteCodeGenerator, currentScope, byteCodeGenerator->GetScriptContext());
195195
if (scopeInfo != nullptr)
196196
{
197+
if (funcInfo->root->IsDeclaredInParamScope())
198+
{
199+
FuncInfo* func = byteCodeGenerator->GetEnclosingFuncInfo();
200+
Assert(func);
201+
202+
if (func->IsBodyAndParamScopeMerged())
203+
{
204+
Assert(currentScope == func->GetParamScope() && currentScope->GetScopeType() == ScopeType_Parameter);
205+
Assert(scopeInfo->GetScopeType() == ScopeType_Parameter);
206+
Assert(func->GetBodyScope());
207+
208+
// If the current function is nested in the param scope of it's enclosing function we may have
209+
// skipped the body scope and in may not be the scope stack but the body scope might still be
210+
// in the frame display and we will need to account for it. See ByteCodeGenerateor::FindScopeForSym.
211+
scopeInfo->mustInstantiate = func->GetBodyScope()->GetMustInstantiate();
212+
}
213+
}
197214
funcInfo->byteCodeFunction->SetScopeInfo(scopeInfo);
198215
}
199216
}

0 commit comments

Comments
 (0)