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