diff --git a/compiler-rt/lib/gwp_asan/common.h b/compiler-rt/lib/gwp_asan/common.h --- a/compiler-rt/lib/gwp_asan/common.h +++ b/compiler-rt/lib/gwp_asan/common.h @@ -22,18 +22,22 @@ // Magic header that resides in the AllocatorState so that GWP-ASan bugreports // can be understood by tools at different versions. Out-of-process crash -// handlers, like crashpad on Fuchsia, take the raw conents of the +// handlers, like crashpad on Fuchsia, take the raw contents of the // AllocationMetatada array and the AllocatorState, and shove them into the // minidump. Online unpacking of these structs needs to know from which version // of GWP-ASan its extracting the information, as the structures are not stable. struct AllocatorVersionMagic { - const uint8_t Magic[4] = {'A', 'S', 'A', 'N'}; + uint8_t Magic[4] = {}; // Update the version number when the AllocatorState or AllocationMetadata // change. - const uint16_t Version = 1; - const uint16_t Reserved = 0; + uint16_t Version = 0; + uint16_t Reserved = 0; }; +// Constants for the AllocatorVersionMagic initialization. +static constexpr uint8_t kAllocatorVersionMagic[4] = {'A', 'S', 'A', 'N'}; +static constexpr uint16_t kAllocatorVersion = 1; + enum class Error : uint8_t { UNKNOWN, USE_AFTER_FREE, @@ -99,7 +103,7 @@ // set of information required for understanding a GWP-ASan crash. struct AllocatorState { constexpr AllocatorState() {} - const AllocatorVersionMagic VersionMagic{}; + AllocatorVersionMagic VersionMagic{}; // Returns whether the provided pointer is a current sampled allocation that // is owned by this pool. diff --git a/compiler-rt/lib/gwp_asan/guarded_pool_allocator.cpp b/compiler-rt/lib/gwp_asan/guarded_pool_allocator.cpp --- a/compiler-rt/lib/gwp_asan/guarded_pool_allocator.cpp +++ b/compiler-rt/lib/gwp_asan/guarded_pool_allocator.cpp @@ -59,6 +59,11 @@ SingletonPtr = this; Backtrace = Opts.Backtrace; + State.VersionMagic = {{kAllocatorVersionMagic[0], kAllocatorVersionMagic[1], + kAllocatorVersionMagic[2], kAllocatorVersionMagic[3]}, + kAllocatorVersion, + 0}; + State.MaxSimultaneousAllocations = Opts.MaxSimultaneousAllocations; const size_t PageSize = getPlatformPageSize();