You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.9 KiB
64 lines
1.9 KiB
4 months ago
|
//===-- scudo_allocator.h ---------------------------------------*- C++ -*-===//
|
||
|
//
|
||
|
// The LLVM Compiler Infrastructure
|
||
|
//
|
||
|
// This file is distributed under the University of Illinois Open Source
|
||
|
// License. See LICENSE.TXT for details.
|
||
|
//
|
||
|
//===----------------------------------------------------------------------===//
|
||
|
///
|
||
|
/// Header for scudo_allocator.cpp.
|
||
|
///
|
||
|
//===----------------------------------------------------------------------===//
|
||
|
|
||
|
#ifndef SCUDO_ALLOCATOR_H_
|
||
|
#define SCUDO_ALLOCATOR_H_
|
||
|
|
||
|
#ifndef __x86_64__
|
||
|
# error "The Scudo hardened allocator currently only supports x86_64."
|
||
|
#endif
|
||
|
|
||
|
#include "scudo_flags.h"
|
||
|
|
||
|
#include "sanitizer_common/sanitizer_allocator.h"
|
||
|
|
||
|
namespace __scudo {
|
||
|
|
||
|
enum AllocType : u8 {
|
||
|
FromMalloc = 0, // Memory block came from malloc, realloc, calloc, etc.
|
||
|
FromNew = 1, // Memory block came from operator new.
|
||
|
FromNewArray = 2, // Memory block came from operator new [].
|
||
|
FromMemalign = 3, // Memory block came from memalign, posix_memalign, etc.
|
||
|
};
|
||
|
|
||
|
struct AllocatorOptions {
|
||
|
u32 QuarantineSizeMb;
|
||
|
u32 ThreadLocalQuarantineSizeKb;
|
||
|
bool MayReturnNull;
|
||
|
bool DeallocationTypeMismatch;
|
||
|
bool DeleteSizeMismatch;
|
||
|
bool ZeroContents;
|
||
|
|
||
|
void setFrom(const Flags *f, const CommonFlags *cf);
|
||
|
void copyTo(Flags *f, CommonFlags *cf) const;
|
||
|
};
|
||
|
|
||
|
void initAllocator(const AllocatorOptions &options);
|
||
|
void drainQuarantine();
|
||
|
|
||
|
void *scudoMalloc(uptr Size, AllocType Type);
|
||
|
void scudoFree(void *Ptr, AllocType Type);
|
||
|
void scudoSizedFree(void *Ptr, uptr Size, AllocType Type);
|
||
|
void *scudoRealloc(void *Ptr, uptr Size);
|
||
|
void *scudoCalloc(uptr NMemB, uptr Size);
|
||
|
void *scudoMemalign(uptr Alignment, uptr Size);
|
||
|
void *scudoValloc(uptr Size);
|
||
|
void *scudoPvalloc(uptr Size);
|
||
|
int scudoPosixMemalign(void **MemPtr, uptr Alignment, uptr Size);
|
||
|
void *scudoAlignedAlloc(uptr Alignment, uptr Size);
|
||
|
uptr scudoMallocUsableSize(void *Ptr);
|
||
|
|
||
|
} // namespace __scudo
|
||
|
|
||
|
#endif // SCUDO_ALLOCATOR_H_
|