From 5ee78f72e87d6305ec55466c79b7bb57c8ee614e Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Sun, 10 May 2026 20:05:58 +0200 Subject: Erase allocation bookkeeping before free + Make allocation bookkeeping more robust MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- libar2simplified_init_context.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'libar2simplified_init_context.c') diff --git a/libar2simplified_init_context.c b/libar2simplified_init_context.c index 9dcbfb0..ad35f13 100644 --- a/libar2simplified_init_context.c +++ b/libar2simplified_init_context.c @@ -53,11 +53,11 @@ allocate(size_t num, size_t size, size_t alignment, struct libar2_context *ctx) size_t pad = (alignment - ((2 * sizeof(size_t)) & (alignment - 1))) & (alignment - 1); char *ptr = alignedalloc(num, size, pad + 2 * sizeof(size_t), alignment); if (ptr) { - ptr = &ptr[pad]; - *(size_t *)ptr = pad; - ptr = &ptr[sizeof(size_t)]; - *(size_t *)ptr = num * size; - ptr = &ptr[sizeof(size_t)]; + ptr += pad; + memcpy(ptr, &pad, sizeof(size_t)); + ptr += sizeof(size_t); + memcpy(ptr, &(size_t){num * size}, sizeof(size_t)); + ptr += sizeof(size_t); } (void) ctx; return ptr; @@ -68,10 +68,13 @@ static void deallocate(void *ptr, struct libar2_context *ctx) { char *p = ptr; + size_t size, pad; p -= sizeof(size_t); - libar2_erase(ptr, *(size_t *)p); + memcpy(&size, p, sizeof(size_t)); p -= sizeof(size_t); - p -= *(size_t *)p; + memcpy(&pad, p, sizeof(size_t)); + p -= pad; + libar2_erase(p, size + pad + 2u * sizeof(size_t)); free(p); (void) ctx; } -- cgit v1.2.3-70-g09d2