1 //===-- scudo_malloc.cpp ----------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 /// 10 /// Interceptors for malloc related functions. 11 /// 12 //===----------------------------------------------------------------------===// 13 14 #include "scudo_allocator.h" 15 16 #include "interception/interception.h" 17 #include "sanitizer_common/sanitizer_platform_interceptors.h" 18 19 using namespace __scudo; 20 21 extern "C" { 22 INTERCEPTOR_ATTRIBUTE void free(void *ptr) { 23 scudoFree(ptr, FromMalloc); 24 } 25 26 INTERCEPTOR_ATTRIBUTE void *malloc(SIZE_T size) { 27 return scudoMalloc(size, FromMalloc); 28 } 29 30 INTERCEPTOR_ATTRIBUTE void *realloc(void *ptr, SIZE_T size) { 31 return scudoRealloc(ptr, size); 32 } 33 34 INTERCEPTOR_ATTRIBUTE void *calloc(SIZE_T nmemb, SIZE_T size) { 35 return scudoCalloc(nmemb, size); 36 } 37 38 INTERCEPTOR_ATTRIBUTE void *valloc(SIZE_T size) { 39 return scudoValloc(size); 40 } 41 42 INTERCEPTOR_ATTRIBUTE 43 int posix_memalign(void **memptr, SIZE_T alignment, SIZE_T size) { 44 return scudoPosixMemalign(memptr, alignment, size); 45 } 46 47 #if SANITIZER_INTERCEPT_CFREE 48 INTERCEPTOR_ATTRIBUTE void cfree(void *ptr) ALIAS("free"); 49 #endif 50 51 #if SANITIZER_INTERCEPT_MEMALIGN 52 INTERCEPTOR_ATTRIBUTE void *memalign(SIZE_T alignment, SIZE_T size) { 53 return scudoMemalign(alignment, size); 54 } 55 56 INTERCEPTOR_ATTRIBUTE 57 void *__libc_memalign(SIZE_T alignment, SIZE_T size) ALIAS("memalign"); 58 #endif 59 60 #if SANITIZER_INTERCEPT_PVALLOC 61 INTERCEPTOR_ATTRIBUTE void *pvalloc(SIZE_T size) { 62 return scudoPvalloc(size); 63 } 64 #endif 65 66 #if SANITIZER_INTERCEPT_ALIGNED_ALLOC 67 INTERCEPTOR_ATTRIBUTE void *aligned_alloc(SIZE_T alignment, SIZE_T size) { 68 return scudoAlignedAlloc(alignment, size); 69 } 70 #endif 71 72 #if SANITIZER_INTERCEPT_MALLOC_USABLE_SIZE 73 INTERCEPTOR_ATTRIBUTE SIZE_T malloc_usable_size(void *ptr) { 74 return scudoMallocUsableSize(ptr); 75 } 76 #endif 77 78 #if SANITIZER_INTERCEPT_MALLOPT_AND_MALLINFO 79 INTERCEPTOR_ATTRIBUTE int mallopt(int cmd, int value) { 80 return -1; 81 } 82 #endif 83 } // extern "C" 84