-
Notifications
You must be signed in to change notification settings - Fork 12.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[scudo] Overhaul malloc related interceptors
Summary: This is a follow-up to D42506. There are a few of things that bothered me about `scudo_interceptors.cpp`: - the filename is a misnomer: it intercepts some functions, but the rest (C++) is actually in `scudo_new_delete.cpp`. I feel like `scudo_malloc.cpp` is more appropriate (ASan uses the same naming scheme); - we do not need "full" interceptors, since we are never accessing the unsanitized version of the functions, we just need the `extern "C" INTERCEPTOR_ATTRIBUTE` part of it to just call our functions; - a couple of functions where duplicated while they could just be `ALIAS`'d; - use the `SANITIZER_INTERCEPT_*` defines to hide the unneeded interceptors; - use `SIZE_T` instead of `uptr`: while it's the same behind the curtain, the former is meant for this use case. In the end there is no functional change on the currently supported platforms (Linux, Android). Reviewers: alekseyshl Reviewed By: alekseyshl Subscribers: mgorny, hintonda, delcypher, #sanitizers, llvm-commits Differential Revision: https://reviews.llvm.org/D42546 llvm-svn: 323464
- Loading branch information
Kostya Kortchinsky
committed
Jan 25, 2018
1 parent
df35594
commit 4b4db00
Showing
3 changed files
with
85 additions
and
72 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,83 @@ | ||
//===-- scudo_malloc.cpp ----------------------------------------*- C++ -*-===// | ||
// | ||
// The LLVM Compiler Infrastructure | ||
// | ||
// This file is distributed under the University of Illinois Open Source | ||
// License. See LICENSE.TXT for details. | ||
// | ||
//===----------------------------------------------------------------------===// | ||
/// | ||
/// Interceptors for malloc related functions. | ||
/// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#include "scudo_allocator.h" | ||
|
||
#include "interception/interception.h" | ||
#include "sanitizer_common/sanitizer_platform_interceptors.h" | ||
|
||
using namespace __scudo; | ||
|
||
extern "C" { | ||
INTERCEPTOR_ATTRIBUTE void free(void *ptr) { | ||
scudoFree(ptr, FromMalloc); | ||
} | ||
|
||
INTERCEPTOR_ATTRIBUTE void *malloc(SIZE_T size) { | ||
return scudoMalloc(size, FromMalloc); | ||
} | ||
|
||
INTERCEPTOR_ATTRIBUTE void *realloc(void *ptr, SIZE_T size) { | ||
return scudoRealloc(ptr, size); | ||
} | ||
|
||
INTERCEPTOR_ATTRIBUTE void *calloc(SIZE_T nmemb, SIZE_T size) { | ||
return scudoCalloc(nmemb, size); | ||
} | ||
|
||
INTERCEPTOR_ATTRIBUTE void *valloc(SIZE_T size) { | ||
return scudoValloc(size); | ||
} | ||
|
||
INTERCEPTOR_ATTRIBUTE | ||
int posix_memalign(void **memptr, SIZE_T alignment, SIZE_T size) { | ||
return scudoPosixMemalign(memptr, alignment, size); | ||
} | ||
|
||
#if SANITIZER_INTERCEPT_CFREE | ||
INTERCEPTOR_ATTRIBUTE void cfree(void *ptr) ALIAS("free"); | ||
#endif | ||
|
||
#if SANITIZER_INTERCEPT_MEMALIGN | ||
INTERCEPTOR_ATTRIBUTE void *memalign(SIZE_T alignment, SIZE_T size) { | ||
return scudoMemalign(alignment, size); | ||
} | ||
|
||
INTERCEPTOR_ATTRIBUTE | ||
void *__libc_memalign(SIZE_T alignment, SIZE_T size) ALIAS("memalign"); | ||
#endif | ||
|
||
#if SANITIZER_INTERCEPT_PVALLOC | ||
INTERCEPTOR_ATTRIBUTE void *pvalloc(SIZE_T size) { | ||
return scudoPvalloc(size); | ||
} | ||
#endif | ||
|
||
#if SANITIZER_INTERCEPT_ALIGNED_ALLOC | ||
INTERCEPTOR_ATTRIBUTE void *aligned_alloc(SIZE_T alignment, SIZE_T size) { | ||
return scudoAlignedAlloc(alignment, size); | ||
} | ||
#endif | ||
|
||
#if SANITIZER_INTERCEPT_MALLOC_USABLE_SIZE | ||
INTERCEPTOR_ATTRIBUTE SIZE_T malloc_usable_size(void *ptr) { | ||
return scudoMallocUsableSize(ptr); | ||
} | ||
#endif | ||
|
||
#if SANITIZER_INTERCEPT_MALLOPT_AND_MALLINFO | ||
INTERCEPTOR_ATTRIBUTE int mallopt(int cmd, int value) { | ||
return -1; | ||
} | ||
#endif | ||
} // extern "C" |