diff options
-rw-r--r-- | libdislocator/libdislocator.so.c | 13 | ||||
-rw-r--r-- | src/afl-forkserver.c | 10 |
2 files changed, 13 insertions, 10 deletions
diff --git a/libdislocator/libdislocator.so.c b/libdislocator/libdislocator.so.c index d92a6985..10ea0a61 100644 --- a/libdislocator/libdislocator.so.c +++ b/libdislocator/libdislocator.so.c @@ -340,7 +340,7 @@ void* realloc(void* ptr, size_t len) { int posix_memalign(void** ptr, size_t align, size_t len) { - if (*ptr == NULL) return EINVAL; + // if (*ptr == NULL) return EINVAL; // (andrea) Why? I comment it out for now if ((align % 2) || (align % sizeof(void*))) return EINVAL; if (len == 0) { @@ -348,12 +348,15 @@ int posix_memalign(void** ptr, size_t align, size_t len) { return 0; } + + size_t rem = len % align; + if (rem) len += align - rem; + + *ptr = __dislocator_alloc(len); - if (align >= 4 * sizeof(size_t)) len += align - 1; + if (*ptr && len) memset(*ptr, ALLOC_CLOBBER, len); - *ptr = malloc(len); - - DEBUGF("posix_memalign(%p %zu, %zu)", ptr, align, len); + DEBUGF("posix_memalign(%p %zu, %zu) [*ptr = %p]", ptr, align, len, *ptr); return 0; diff --git a/src/afl-forkserver.c b/src/afl-forkserver.c index 893a0173..5e20e50b 100644 --- a/src/afl-forkserver.c +++ b/src/afl-forkserver.c @@ -259,11 +259,11 @@ void init_forkserver(char **argv) { setenv("MSAN_OPTIONS", "exit_code=" STRINGIFY(MSAN_ERROR) ":" - "symbolize=0:" - "abort_on_error=1:" - "malloc_context_size=0:" - "allocator_may_return_null=1:" - "msan_track_origins=0", + "symbolize=0:" + "abort_on_error=1:" + "malloc_context_size=0:" + "allocator_may_return_null=1:" + "msan_track_origins=0", 0); execv(target_path, argv); |