From 440e6c1197636a1dc0ae413fca815254a71d2a27 Mon Sep 17 00:00:00 2001 From: Eyal Itkin Date: Mon, 30 Mar 2020 21:32:35 +0300 Subject: Resolve bug when using unusual MALLOC_ALIGNMENT Safe-Linking alignment checks should be done on the user's buffer and not the mchunkptr. The new check adds support for cases in which: MALLOC_ALIGNMENT != 2*(sizeof(size_t)) The default case for both 32 bits and 64 bits was already supported, and this patch adds support for the described irregular case. --- libc/stdlib/malloc-standard/malloc.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'libc') diff --git a/libc/stdlib/malloc-standard/malloc.h b/libc/stdlib/malloc-standard/malloc.h index c281418d3..f196a560f 100644 --- a/libc/stdlib/malloc-standard/malloc.h +++ b/libc/stdlib/malloc-standard/malloc.h @@ -849,8 +849,11 @@ typedef struct malloc_chunk* mfastbinptr; */ #define PROTECT_PTR(pos, ptr) ((mchunkptr)((((size_t)pos) >> PAGE_SHIFT) ^ ((size_t)ptr))) #define REVEAL_PTR(pos, ptr) PROTECT_PTR(pos, ptr) -#define CHECK_PTR(P) \ - if (!aligned_OK(P)) \ +#define PTR_FOR_ALIGNMENT_CHECK(P) \ + (MALLOC_ALIGNMENT == 2*(sizeof(size_t)) ? (P) : chunk2mem(P)) + +#define CHECK_PTR(P) \ + if (!aligned_OK(PTR_FOR_ALIGNMENT_CHECK(P))) \ abort(); /* -- cgit v1.2.3