diff options
Diffstat (limited to 'lib/scudo')
-rw-r--r-- | lib/scudo/scudo_allocator_secondary.h | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/lib/scudo/scudo_allocator_secondary.h b/lib/scudo/scudo_allocator_secondary.h index 3b247bfb3..d3468f840 100644 --- a/lib/scudo/scudo_allocator_secondary.h +++ b/lib/scudo/scudo_allocator_secondary.h @@ -54,9 +54,8 @@ class ScudoLargeMmapAllocator { uptr NewMapBeg = UserBeg - HeadersSize; NewMapBeg = RoundDownTo(NewMapBeg, PageSize) - PageSize; CHECK_GE(NewMapBeg, MapBeg); - uptr NewMapEnd = - RoundUpTo(UserBeg + Size - Alignment - AlignedChunkHeaderSize, - PageSize) + PageSize; + uptr NewMapSize = RoundUpTo(MapSize - Alignment, PageSize); + uptr NewMapEnd = NewMapBeg + NewMapSize; CHECK_LE(NewMapEnd, MapEnd); // Unmap the extra memory if it's large enough. uptr Diff = NewMapBeg - MapBeg; @@ -66,8 +65,8 @@ class ScudoLargeMmapAllocator { if (Diff > PageSize) UnmapOrDie(reinterpret_cast<void *>(NewMapEnd), Diff); MapBeg = NewMapBeg; + MapSize = NewMapSize; MapEnd = NewMapEnd; - MapSize = NewMapEnd - NewMapBeg; } uptr UserEnd = UserBeg - AlignedChunkHeaderSize + Size; // For larger alignments, Alignment was added by the frontend to Size. |