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 #include <stddef.h> 20 21 using namespace __scudo; 22 23 extern "C" { 24 INTERCEPTOR_ATTRIBUTE void free(void *ptr) { 25 scudoDeallocate(ptr, 0, 0, FromMalloc); 26 } 27 28 INTERCEPTOR_ATTRIBUTE void *malloc(size_t size) { 29 return scudoAllocate(size, 0, FromMalloc); 30 } 31 32 INTERCEPTOR_ATTRIBUTE void *realloc(void *ptr, size_t size) { 33 return scudoRealloc(ptr, size); 34 } 35 36 INTERCEPTOR_ATTRIBUTE void *calloc(size_t nmemb, size_t size) { 37 return scudoCalloc(nmemb, size); 38 } 39 40 INTERCEPTOR_ATTRIBUTE void *valloc(size_t size) { 41 return scudoValloc(size); 42 } 43 44 INTERCEPTOR_ATTRIBUTE 45 int posix_memalign(void **memptr, size_t alignment, size_t size) { 46 return scudoPosixMemalign(memptr, alignment, size); 47 } 48 49 #if SANITIZER_INTERCEPT_CFREE 50 INTERCEPTOR_ATTRIBUTE void cfree(void *ptr) ALIAS("free"); 51 #endif 52 53 #if SANITIZER_INTERCEPT_MEMALIGN 54 INTERCEPTOR_ATTRIBUTE void *memalign(size_t alignment, size_t size) { 55 return scudoAllocate(size, alignment, FromMemalign); 56 } 57 58 INTERCEPTOR_ATTRIBUTE 59 void *__libc_memalign(size_t alignment, size_t size) ALIAS("memalign"); 60 #endif 61 62 #if SANITIZER_INTERCEPT_PVALLOC 63 INTERCEPTOR_ATTRIBUTE void *pvalloc(size_t size) { 64 return scudoPvalloc(size); 65 } 66 #endif 67 68 #if SANITIZER_INTERCEPT_ALIGNED_ALLOC 69 INTERCEPTOR_ATTRIBUTE void *aligned_alloc(size_t alignment, size_t size) { 70 return scudoAlignedAlloc(alignment, size); 71 } 72 #endif 73 74 #if SANITIZER_INTERCEPT_MALLOC_USABLE_SIZE 75 INTERCEPTOR_ATTRIBUTE size_t malloc_usable_size(void *ptr) { 76 return scudoMallocUsableSize(ptr); 77 } 78 #endif 79 80 #if SANITIZER_INTERCEPT_MALLOPT_AND_MALLINFO 81 INTERCEPTOR_ATTRIBUTE int mallopt(int cmd, int value) { 82 return 0; 83 } 84 #endif 85 } // extern "C" 86