[scudo] Change secondary StatsAllocated update
authorChristopher Ferris <cferris@google.com>
Tue, 9 May 2023 02:12:32 +0000 (19:12 -0700)
committerChristopher Ferris <cferris@google.com>
Tue, 9 May 2023 22:40:57 +0000 (15:40 -0700)
In the secondary allocation routine, the StatsAllocated stat is
increased by BlockSize. However, in the deallocate routine, the
stat subtract uses CommitSize. CommitSize can be bigger than BlockSize
so this can lead to a negative calculated stat. Since the stats
are not guaranteed to be completely accurate, just add CommitSize
during allocation.

Reviewed By: Chia-hungDuan

Differential Revision: https://reviews.llvm.org/D150169

compiler-rt/lib/scudo/standalone/secondary.h

index 935b489..94009f5 100644 (file)
@@ -522,13 +522,12 @@ void *MapAllocator<Config>::allocate(Options Options, uptr Size, uptr Alignment,
       if (FillContents && !Zeroed)
         memset(Ptr, FillContents == ZeroFill ? 0 : PatternFillByte,
                BlockEnd - PtrInt);
-      const uptr BlockSize = BlockEnd - HInt;
       {
         ScopedLock L(Mutex);
         InUseBlocks.push_back(H);
-        AllocatedBytes += BlockSize;
+        AllocatedBytes += H->CommitSize;
         NumberOfAllocs++;
-        Stats.add(StatAllocated, BlockSize);
+        Stats.add(StatAllocated, H->CommitSize);
         Stats.add(StatMapped, H->MemMap.getCapacity());
       }
       return Ptr;