1 //===-- scudo_malloc.cpp ----------------------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 /// 9 /// Interceptors for malloc related functions. 10 /// 11 //===----------------------------------------------------------------------===// 12 13 #include "scudo_allocator.h" 14 15 #include "interception/interception.h" 16 #include "sanitizer_common/sanitizer_platform_interceptors.h" 17 18 #include <stddef.h> 19 20 using namespace __scudo; 21 22 extern "C" { 23 INTERCEPTOR_ATTRIBUTE void free(void *ptr) { 24 scudoDeallocate(ptr, 0, 0, FromMalloc); 25 } 26 27 INTERCEPTOR_ATTRIBUTE void *malloc(size_t size) { 28 return scudoAllocate(size, 0, FromMalloc); 29 } 30 31 INTERCEPTOR_ATTRIBUTE void *realloc(void *ptr, size_t size) { 32 return scudoRealloc(ptr, size); 33 } 34 35 INTERCEPTOR_ATTRIBUTE void *calloc(size_t nmemb, size_t size) { 36 return scudoCalloc(nmemb, size); 37 } 38 39 INTERCEPTOR_ATTRIBUTE void *valloc(size_t size) { 40 return scudoValloc(size); 41 } 42 43 INTERCEPTOR_ATTRIBUTE 44 int posix_memalign(void **memptr, size_t alignment, size_t size) { 45 return scudoPosixMemalign(memptr, alignment, size); 46 } 47 48 #if SANITIZER_INTERCEPT_CFREE 49 INTERCEPTOR_ATTRIBUTE void cfree(void *ptr) ALIAS("free"); 50 #endif 51 52 #if SANITIZER_INTERCEPT_MEMALIGN 53 INTERCEPTOR_ATTRIBUTE void *memalign(size_t alignment, size_t size) { 54 return scudoAllocate(size, alignment, FromMemalign); 55 } 56 57 INTERCEPTOR_ATTRIBUTE 58 void *__libc_memalign(size_t alignment, size_t size) ALIAS("memalign"); 59 #endif 60 61 #if SANITIZER_INTERCEPT_PVALLOC 62 INTERCEPTOR_ATTRIBUTE void *pvalloc(size_t size) { 63 return scudoPvalloc(size); 64 } 65 #endif 66 67 #if SANITIZER_INTERCEPT_ALIGNED_ALLOC 68 INTERCEPTOR_ATTRIBUTE void *aligned_alloc(size_t alignment, size_t size) { 69 return scudoAlignedAlloc(alignment, size); 70 } 71 #endif 72 73 #if SANITIZER_INTERCEPT_MALLOC_USABLE_SIZE 74 INTERCEPTOR_ATTRIBUTE size_t malloc_usable_size(void *ptr) { 75 return scudoMallocUsableSize(ptr); 76 } 77 #endif 78 79 #if SANITIZER_INTERCEPT_MALLOPT_AND_MALLINFO 80 INTERCEPTOR_ATTRIBUTE int mallopt(int cmd, int value) { 81 return 0; 82 } 83 #endif 84 } // extern "C" 85