Skip to content

Commit

Permalink
[scudo] Overhaul malloc related interceptors
Browse files Browse the repository at this point in the history
Summary:
This is a follow-up to D42506.

There are a few of things that bothered me about `scudo_interceptors.cpp`:
- the filename is a misnomer: it intercepts some functions, but the rest (C++)
  is actually in `scudo_new_delete.cpp`. I feel like `scudo_malloc.cpp` is more
  appropriate (ASan uses the same naming scheme);
- we do not need "full" interceptors, since we are never accessing the
  unsanitized version of the functions, we just need the
  `extern "C" INTERCEPTOR_ATTRIBUTE` part of it to just call our functions;
- a couple of functions where duplicated while they could just be `ALIAS`'d;
- use the `SANITIZER_INTERCEPT_*` defines to hide the unneeded interceptors;
- use `SIZE_T` instead of `uptr`: while it's the same behind the curtain,
  the former is meant for this use case.

In the end there is no functional change on the currently supported platforms
(Linux, Android).

Reviewers: alekseyshl

Reviewed By: alekseyshl

Subscribers: mgorny, hintonda, delcypher, #sanitizers, llvm-commits

Differential Revision: https://reviews.llvm.org/D42546

llvm-svn: 323464
  • Loading branch information
Kostya Kortchinsky committed Jan 25, 2018
1 parent df35594 commit 4b4db00
Showing 3 changed files with 85 additions and 72 deletions.
4 changes: 2 additions & 2 deletions compiler-rt/lib/scudo/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -11,9 +11,9 @@ set(SCUDO_DYNAMIC_LINK_FLAGS ${SANITIZER_COMMON_LINK_FLAGS})

set(SCUDO_SOURCES
scudo_allocator.cpp
scudo_flags.cpp
scudo_crc32.cpp
scudo_interceptors.cpp
scudo_flags.cpp
scudo_malloc.cpp
scudo_termination.cpp
scudo_tsd_exclusive.cpp
scudo_tsd_shared.cpp
70 changes: 0 additions & 70 deletions compiler-rt/lib/scudo/scudo_interceptors.cpp

This file was deleted.

83 changes: 83 additions & 0 deletions compiler-rt/lib/scudo/scudo_malloc.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
//===-- scudo_malloc.cpp ----------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
///
/// Interceptors for malloc related functions.
///
//===----------------------------------------------------------------------===//

#include "scudo_allocator.h"

#include "interception/interception.h"
#include "sanitizer_common/sanitizer_platform_interceptors.h"

using namespace __scudo;

extern "C" {
INTERCEPTOR_ATTRIBUTE void free(void *ptr) {
scudoFree(ptr, FromMalloc);
}

INTERCEPTOR_ATTRIBUTE void *malloc(SIZE_T size) {
return scudoMalloc(size, FromMalloc);
}

INTERCEPTOR_ATTRIBUTE void *realloc(void *ptr, SIZE_T size) {
return scudoRealloc(ptr, size);
}

INTERCEPTOR_ATTRIBUTE void *calloc(SIZE_T nmemb, SIZE_T size) {
return scudoCalloc(nmemb, size);
}

INTERCEPTOR_ATTRIBUTE void *valloc(SIZE_T size) {
return scudoValloc(size);
}

INTERCEPTOR_ATTRIBUTE
int posix_memalign(void **memptr, SIZE_T alignment, SIZE_T size) {
return scudoPosixMemalign(memptr, alignment, size);
}

#if SANITIZER_INTERCEPT_CFREE
INTERCEPTOR_ATTRIBUTE void cfree(void *ptr) ALIAS("free");
#endif

#if SANITIZER_INTERCEPT_MEMALIGN
INTERCEPTOR_ATTRIBUTE void *memalign(SIZE_T alignment, SIZE_T size) {
return scudoMemalign(alignment, size);
}

INTERCEPTOR_ATTRIBUTE
void *__libc_memalign(SIZE_T alignment, SIZE_T size) ALIAS("memalign");
#endif

#if SANITIZER_INTERCEPT_PVALLOC
INTERCEPTOR_ATTRIBUTE void *pvalloc(SIZE_T size) {
return scudoPvalloc(size);
}
#endif

#if SANITIZER_INTERCEPT_ALIGNED_ALLOC
INTERCEPTOR_ATTRIBUTE void *aligned_alloc(SIZE_T alignment, SIZE_T size) {
return scudoAlignedAlloc(alignment, size);
}
#endif

#if SANITIZER_INTERCEPT_MALLOC_USABLE_SIZE
INTERCEPTOR_ATTRIBUTE SIZE_T malloc_usable_size(void *ptr) {
return scudoMallocUsableSize(ptr);
}
#endif

#if SANITIZER_INTERCEPT_MALLOPT_AND_MALLINFO
INTERCEPTOR_ATTRIBUTE int mallopt(int cmd, int value) {
return -1;
}
#endif
} // extern "C"

0 comments on commit 4b4db00

Please sign in to comment.