From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Wed, 5 Dec 2018 01:51:56 -0500 Subject: [PATCH] add hardened_malloc library --- libc/Android.bp | 44 ++++++++++++++++++++++++++++------- libc/bionic/malloc_common.cpp | 5 ++++ 2 files changed, 40 insertions(+), 9 deletions(-) diff --git a/libc/Android.bp b/libc/Android.bp index eeeadb672..5b3495ff2 100644 --- a/libc/Android.bp +++ b/libc/Android.bp @@ -51,6 +51,8 @@ libc_common_flags = [ // Clang's exit-time destructor registration hides __dso_handle, but // __dso_handle needs to have default visibility on ARM32. See b/73485611. "-Wexit-time-destructors", + + "-DH_MALLOC_PREFIX", ] // Define some common cflags @@ -64,9 +66,17 @@ cc_defaults { cppflags: [], include_dirs: [ "bionic/libc/async_safe/include", - "external/jemalloc/include", ], + multilib: { + lib32: { + include_dirs: ["external/jemalloc/include"], + }, + lib64: { + include_dirs: ["external/hardened_malloc/"], + }, + }, + stl: "none", system_shared_libs: [], sanitize: { @@ -1609,11 +1619,6 @@ cc_library_static { name: "libc_ndk", defaults: ["libc_defaults"], srcs: libc_common_src_files + ["bionic/malloc_common.cpp"], - multilib: { - lib32: { - srcs: libc_common_src_files_32, - }, - }, arch: { arm: { srcs: [ @@ -1645,9 +1650,18 @@ cc_library_static { "libc_syscalls", "libc_tzcode", "libm", - "libjemalloc", "libstdc++", ], + + multilib: { + lib32: { + srcs: libc_common_src_files_32, + whole_static_libs: ["libjemalloc"], + }, + lib64: { + whole_static_libs: ["libhardened_malloc"], + }, + }, } // ======================================================== @@ -1737,7 +1751,11 @@ cc_library_static { // ======================================================== cc_library_static { defaults: ["libc_defaults"], - srcs: ["bionic/jemalloc_wrapper.cpp"], + multilib: { + lib32: { + srcs: ["bionic/jemalloc_wrapper.cpp"], + }, + }, cflags: ["-fvisibility=hidden"], name: "libc_malloc", @@ -1800,9 +1818,17 @@ cc_library { ], whole_static_libs: [ "libc_common", - "libjemalloc", ], + multilib: { + lib32: { + whole_static_libs: ["libjemalloc"], + }, + lib64: { + whole_static_libs: ["libhardened_malloc"], + }, + }, + nocrt: true, arch: { diff --git a/libc/bionic/malloc_common.cpp b/libc/bionic/malloc_common.cpp index 1ea4ac1a3..c86fbdaea 100644 --- a/libc/bionic/malloc_common.cpp +++ b/libc/bionic/malloc_common.cpp @@ -46,8 +46,13 @@ #include #include +#ifdef __LP64__ +#include "h_malloc.h" +#define Malloc(function) h_ ## function +#else #include "jemalloc.h" #define Malloc(function) je_ ## function +#endif static constexpr MallocDispatch __libc_malloc_default_dispatch __attribute__((unused)) = {