From 53db552b054fa2bf804e56d3544ab4a56dbfe918 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Luk=C3=A1=C5=A1=20Ondr=C3=A1=C4=8Dek?= Date: Thu, 31 Oct 2024 17:39:31 +0100 Subject: [PATCH] daemon/mmapped: use static_assert on undefined padding --- daemon/defer.c | 11 ++++++----- daemon/ratelimiting.c | 17 +++++++++-------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/daemon/defer.c b/daemon/defer.c index ef24727df..59af3e689 100644 --- a/daemon/defer.c +++ b/daemon/defer.c @@ -458,11 +458,12 @@ int defer_init(const char *mmap_file, int cpus) size_t size = offsetof(struct defer, kru) + KRU.get_size(capacity_log); size_t header_size = offsetof(struct defer, using_avx2) + sizeof(header.using_avx2); - kr_assert(header_size == - sizeof(header.capacity) + - sizeof(header.max_decay) + - sizeof(header.cpus) + - sizeof(header.using_avx2)); // no undefined padding inside + static_assert( // no padding up to .using_avx2 + offsetof(struct defer, using_avx2) == + sizeof(header.capacity) + + sizeof(header.max_decay) + + sizeof(header.cpus), + "detected padding with undefined data inside mmapped header"); ret = mmapped_init(&defer_mmapped, mmap_file, size, &header, header_size); if (ret == MMAPPED_WAS_FIRST) { diff --git a/daemon/ratelimiting.c b/daemon/ratelimiting.c index 179ce0431..528608cf9 100644 --- a/daemon/ratelimiting.c +++ b/daemon/ratelimiting.c @@ -63,14 +63,15 @@ int ratelimiting_init(const char *mmap_file, size_t capacity, uint32_t instant_l }; size_t header_size = offsetof(struct ratelimiting, using_avx2) + sizeof(header.using_avx2); - kr_assert(header_size == - sizeof(header.capacity) + - sizeof(header.instant_limit) + - sizeof(header.rate_limit) + - sizeof(header.log_period) + - sizeof(header.slip) + - sizeof(header.dry_run) + - sizeof(header.using_avx2)); // no undefined padding inside + static_assert( // no padding up to .using_avx2 + offsetof(struct ratelimiting, using_avx2) == + sizeof(header.capacity) + + sizeof(header.instant_limit) + + sizeof(header.rate_limit) + + sizeof(header.log_period) + + sizeof(header.slip) + + sizeof(header.dry_run), + "detected padding with undefined data inside mmapped header"); int ret = mmapped_init(&ratelimiting_mmapped, mmap_file, size, &header, header_size); if (ret == MMAPPED_WAS_FIRST) { -- 2.47.2