Skip to content

Commit f00612b

Browse files
MikeHolmananeeshdk
authored andcommitted
[CVE-2018-8385] Edge - Logic bug in Chakra temp tracker leads to invalid pointer read - Internal
When merging block data for loops, we may have data from one edge that a sym is non-temp, but from a different edge we know that there is a temp transfer dependency on that sym. This leads to an inconsistency between the sets where we can treat a non-temp sym as a temp. To solve this, I've changed so that when we merge data we check if any transfer dependency sets have a non-temp sym, and if so it should also be treated as non-temp.
1 parent f8bdb18 commit f00612b

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

lib/Backend/TempTracker.cpp

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,9 +79,19 @@ TempTrackerBase::~TempTrackerBase()
7979
void
8080
TempTrackerBase::MergeData(TempTrackerBase * fromData, bool deleteData)
8181
{
82-
nonTempSyms.Or(&fromData->nonTempSyms);
83-
tempTransferredSyms.Or(&fromData->tempTransferredSyms);
84-
MergeDependencies(tempTransferDependencies, fromData->tempTransferDependencies, deleteData);
82+
this->nonTempSyms.Or(&fromData->nonTempSyms);
83+
this->tempTransferredSyms.Or(&fromData->tempTransferredSyms);
84+
this->MergeDependencies(this->tempTransferDependencies, fromData->tempTransferDependencies, deleteData);
85+
if (this->tempTransferDependencies)
86+
{
87+
FOREACH_HASHTABLE_ENTRY(BVSparse<JitArenaAllocator> *, bucket, this->tempTransferDependencies)
88+
{
89+
if (bucket.element->Test(&this->nonTempSyms))
90+
{
91+
this->nonTempSyms.Set(bucket.value);
92+
}
93+
} NEXT_HASHTABLE_ENTRY;
94+
}
8595
}
8696

8797
void

0 commit comments

Comments
 (0)