1 //===-- scudo_allocator.h ---------------------------------------*- 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 /// Header for scudo_allocator.cpp.
11 ///
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef SCUDO_ALLOCATOR_H_
15 #define SCUDO_ALLOCATOR_H_
16 
17 #ifndef __x86_64__
18 # error "The Scudo hardened allocator currently only supports x86_64."
19 #endif
20 
21 #include "scudo_flags.h"
22 
23 #include "sanitizer_common/sanitizer_allocator.h"
24 
25 namespace __scudo {
26 
27 enum AllocType : u8 {
28   FromMalloc    = 0, // Memory block came from malloc, realloc, calloc, etc.
29   FromNew       = 1, // Memory block came from operator new.
30   FromNewArray  = 2, // Memory block came from operator new [].
31   FromMemalign  = 3, // Memory block came from memalign, posix_memalign, etc.
32 };
33 
34 struct AllocatorOptions {
35   u32 QuarantineSizeMb;
36   u32 ThreadLocalQuarantineSizeKb;
37   bool MayReturnNull;
38   bool DeallocationTypeMismatch;
39   bool DeleteSizeMismatch;
40   bool ZeroContents;
41 
42   void setFrom(const Flags *f, const CommonFlags *cf);
43   void copyTo(Flags *f, CommonFlags *cf) const;
44 };
45 
46 void initAllocator(const AllocatorOptions &options);
47 void drainQuarantine();
48 
49 void *scudoMalloc(uptr Size, AllocType Type);
50 void scudoFree(void *Ptr, AllocType Type);
51 void scudoSizedFree(void *Ptr, uptr Size, AllocType Type);
52 void *scudoRealloc(void *Ptr, uptr Size);
53 void *scudoCalloc(uptr NMemB, uptr Size);
54 void *scudoMemalign(uptr Alignment, uptr Size);
55 void *scudoValloc(uptr Size);
56 void *scudoPvalloc(uptr Size);
57 int scudoPosixMemalign(void **MemPtr, uptr Alignment, uptr Size);
58 void *scudoAlignedAlloc(uptr Alignment, uptr Size);
59 uptr scudoMallocUsableSize(void *Ptr);
60 
61 } // namespace __scudo
62 
63 #endif  // SCUDO_ALLOCATOR_H_
64