[NFC][scudo] Enforce header size alignment

As-is it should not change struct size, but it will
help to keep correct size if more fields added.
This commit is contained in:
Vitaly Buka 2021-05-23 14:12:49 -07:00
parent c2f819af73
commit 93d1e5822e
1 changed files with 11 additions and 6 deletions

View File

@ -28,7 +28,10 @@ namespace scudo {
namespace LargeBlock { namespace LargeBlock {
struct Header { struct alignas(Max<uptr>(archSupportsMemoryTagging()
? archMemoryTagGranuleSize()
: 1,
1U << SCUDO_MIN_ALIGNMENT_LOG)) Header {
LargeBlock::Header *Prev; LargeBlock::Header *Prev;
LargeBlock::Header *Next; LargeBlock::Header *Next;
uptr CommitBase; uptr CommitBase;
@ -38,9 +41,12 @@ struct Header {
[[no_unique_address]] MapPlatformData Data; [[no_unique_address]] MapPlatformData Data;
}; };
constexpr uptr getHeaderSize() { static_assert(sizeof(Header) % (1U << SCUDO_MIN_ALIGNMENT_LOG) == 0, "");
return roundUpTo(sizeof(Header), 1U << SCUDO_MIN_ALIGNMENT_LOG); static_assert(!archSupportsMemoryTagging() ||
} sizeof(Header) % archMemoryTagGranuleSize() == 0,
"");
constexpr uptr getHeaderSize() { return sizeof(Header); }
template <typename Config> static uptr addHeaderTag(uptr Ptr) { template <typename Config> static uptr addHeaderTag(uptr Ptr) {
if (allocatorSupportsMemoryTagging<Config>()) if (allocatorSupportsMemoryTagging<Config>())
@ -49,8 +55,7 @@ template <typename Config> static uptr addHeaderTag(uptr Ptr) {
} }
template <typename Config> static Header *getHeader(uptr Ptr) { template <typename Config> static Header *getHeader(uptr Ptr) {
return reinterpret_cast<Header *>(addHeaderTag<Config>(Ptr) - return reinterpret_cast<Header *>(addHeaderTag<Config>(Ptr)) - 1;
getHeaderSize());
} }
template <typename Config> static Header *getHeader(const void *Ptr) { template <typename Config> static Header *getHeader(const void *Ptr) {