// Copyright 2018 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // The AllocatorState class is the subset of the GuardedPageAllocator that is // required by the crash handler to analyzer crashes and provide debug // information. The crash handler initializes an instance of this class from // the crashed processes memory. Because the out-of-process allocator could be // corrupted or maliciously tampered with, this class is security sensitive and // needs to be modified with care. It has been purposefully designed to be: // - Minimal: This is the minimum set of methods and members required by the // crash handler. // - Trivially copyable: An instance of this object is copied from another // processes memory. Ensuring it is trivially copyable means that the crash // handler will not accidentally trigger a complex destructor on objects // initialized from another processes memory. // - Free of pointers: Pointers are all uintptr_t since none of these pointers // need to be directly dereferenced. Encourage users like the crash handler // to consider them addresses instead of pointers. // - Validatable: The IsValid() method is intended to sanity check the internal // fields such that it's safe to call any method on a valid object. All // additional methods and fields need to be audited to ensure they maintain // this invariant! #ifndef COMPONENTS_GWP_ASAN_COMMON_ALLOCATOR_STATE_H_ #define COMPONENTS_GWP_ASAN_COMMON_ALLOCATOR_STATE_H_ #include <atomic> #include <limits> #include <string> #include <type_traits> #include "components/gwp_asan/common/allocation_info.h" namespace gwp_asan { namespace internal { class GuardedPageAllocator; class AllocatorState { … }; // Ensure that the allocator state is a plain-old-data. That way we can safely // initialize it by copying memory from out-of-process without worrying about // destructors operating on the fields in an unexpected way. static_assert …; static_assert …; } // namespace internal } // namespace gwp_asan #endif // COMPONENTS_GWP_ASAN_COMMON_ALLOCATOR_STATE_H_