diff options
author | Eyal Itkin <eyal.itkin@gmail.com> | 2020-03-30 21:32:35 +0300 |
---|---|---|
committer | Waldemar Brodkorb <wbx@openadk.org> | 2020-04-01 21:43:28 +0200 |
commit | 440e6c1197636a1dc0ae413fca815254a71d2a27 (patch) | |
tree | 31f6a8ef3c77e528bccd53495c248d152e08bf82 /libc | |
parent | 6f7c6883b72134d1ae28a6223ab9c9738d033867 (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.
Diffstat (limited to 'libc')
-rw-r--r-- | libc/stdlib/malloc-standard/malloc.h | 7 |
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(); /* |