From ea857e82251e87fa2d966e50f499e7b560734428 Mon Sep 17 00:00:00 2001 From: Evgeniy Stepanov Date: Thu, 25 Oct 2018 22:15:44 +0000 Subject: [PATCH] [sanitizer] Fix mallopt interceptor. On error, mallopt is supposed to return 0, not -1. llvm-svn: 345323 --- compiler-rt/lib/asan/asan_malloc_linux.cc | 2 +- compiler-rt/lib/hwasan/hwasan_interceptors.cc | 2 +- compiler-rt/lib/lsan/lsan_interceptors.cc | 2 +- compiler-rt/lib/msan/msan_interceptors.cc | 2 +- compiler-rt/lib/scudo/scudo_malloc.cpp | 2 +- compiler-rt/test/sanitizer_common/TestCases/Linux/mallopt.cc | 9 +++++++++ 6 files changed, 14 insertions(+), 5 deletions(-) create mode 100644 compiler-rt/test/sanitizer_common/TestCases/Linux/mallopt.cc diff --git a/compiler-rt/lib/asan/asan_malloc_linux.cc b/compiler-rt/lib/asan/asan_malloc_linux.cc index 76bdff9..0a534fe 100644 --- a/compiler-rt/lib/asan/asan_malloc_linux.cc +++ b/compiler-rt/lib/asan/asan_malloc_linux.cc @@ -209,7 +209,7 @@ INTERCEPTOR(struct fake_mallinfo, mallinfo, void) { } INTERCEPTOR(int, mallopt, int cmd, int value) { - return -1; + return 0; } #endif // SANITIZER_INTERCEPT_MALLOPT_AND_MALLINFO diff --git a/compiler-rt/lib/hwasan/hwasan_interceptors.cc b/compiler-rt/lib/hwasan/hwasan_interceptors.cc index 9a0770f..fed4003 100644 --- a/compiler-rt/lib/hwasan/hwasan_interceptors.cc +++ b/compiler-rt/lib/hwasan/hwasan_interceptors.cc @@ -186,7 +186,7 @@ struct __sanitizer_struct_mallinfo __sanitizer_mallinfo() { } int __sanitizer_mallopt(int cmd, int value) { - return -1; + return 0; } void __sanitizer_malloc_stats(void) { diff --git a/compiler-rt/lib/lsan/lsan_interceptors.cc b/compiler-rt/lib/lsan/lsan_interceptors.cc index fde52e4..a9bd2ba 100644 --- a/compiler-rt/lib/lsan/lsan_interceptors.cc +++ b/compiler-rt/lib/lsan/lsan_interceptors.cc @@ -153,7 +153,7 @@ INTERCEPTOR(struct fake_mallinfo, mallinfo, void) { #define LSAN_MAYBE_INTERCEPT_MALLINFO INTERCEPT_FUNCTION(mallinfo) INTERCEPTOR(int, mallopt, int cmd, int value) { - return -1; + return 0; } #define LSAN_MAYBE_INTERCEPT_MALLOPT INTERCEPT_FUNCTION(mallopt) #else diff --git a/compiler-rt/lib/msan/msan_interceptors.cc b/compiler-rt/lib/msan/msan_interceptors.cc index f338d42..9f346a5 100644 --- a/compiler-rt/lib/msan/msan_interceptors.cc +++ b/compiler-rt/lib/msan/msan_interceptors.cc @@ -265,7 +265,7 @@ INTERCEPTOR(void, mallinfo, __sanitizer_struct_mallinfo *sret) { #if !SANITIZER_FREEBSD && !SANITIZER_NETBSD INTERCEPTOR(int, mallopt, int cmd, int value) { - return -1; + return 0; } #define MSAN_MAYBE_INTERCEPT_MALLOPT INTERCEPT_FUNCTION(mallopt) #else diff --git a/compiler-rt/lib/scudo/scudo_malloc.cpp b/compiler-rt/lib/scudo/scudo_malloc.cpp index 91a77b3..eef7768 100644 --- a/compiler-rt/lib/scudo/scudo_malloc.cpp +++ b/compiler-rt/lib/scudo/scudo_malloc.cpp @@ -79,7 +79,7 @@ INTERCEPTOR_ATTRIBUTE size_t malloc_usable_size(void *ptr) { #if SANITIZER_INTERCEPT_MALLOPT_AND_MALLINFO INTERCEPTOR_ATTRIBUTE int mallopt(int cmd, int value) { - return -1; + return 0; } #endif } // extern "C" diff --git a/compiler-rt/test/sanitizer_common/TestCases/Linux/mallopt.cc b/compiler-rt/test/sanitizer_common/TestCases/Linux/mallopt.cc new file mode 100644 index 0000000..0aa9f98 --- /dev/null +++ b/compiler-rt/test/sanitizer_common/TestCases/Linux/mallopt.cc @@ -0,0 +1,9 @@ +// Check that mallopt does not return invalid values (ex. -1). +// RUN: %clangxx -O2 %s -o %t && %run %t +#include +#include + +int main() { + int res = mallopt(M_ARENA_MAX, 0); + assert(res == 0 || res == 1); +} -- 2.7.4