summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEyal Itkin <eyal.itkin@gmail.com>2020-03-30 21:32:35 +0300
committerWaldemar Brodkorb <wbx@openadk.org>2020-04-01 21:43:28 +0200
commit440e6c1197636a1dc0ae413fca815254a71d2a27 (patch)
tree31f6a8ef3c77e528bccd53495c248d152e08bf82
parent6f7c6883b72134d1ae28a6223ab9c9738d033867 (diff)
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.
-rw-r--r--libc/stdlib/malloc-standard/malloc.h7
1 files changed, 5 insertions, 2 deletions
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();
/*