[sanitizer] Fix mallopt interceptor.
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>
Thu, 25 Oct 2018 22:15:44 +0000 (22:15 +0000)
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>
Thu, 25 Oct 2018 22:15:44 +0000 (22:15 +0000)
On error, mallopt is supposed to return 0, not -1.

llvm-svn: 345323

compiler-rt/lib/asan/asan_malloc_linux.cc
compiler-rt/lib/hwasan/hwasan_interceptors.cc
compiler-rt/lib/lsan/lsan_interceptors.cc
compiler-rt/lib/msan/msan_interceptors.cc
compiler-rt/lib/scudo/scudo_malloc.cpp
compiler-rt/test/sanitizer_common/TestCases/Linux/mallopt.cc [new file with mode: 0644]

index 76bdff9..0a534fe 100644 (file)
@@ -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
 
index 9a0770f..fed4003 100644 (file)
@@ -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) {
index fde52e4..a9bd2ba 100644 (file)
@@ -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
index f338d42..9f346a5 100644 (file)
@@ -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
index 91a77b3..eef7768 100644 (file)
@@ -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 (file)
index 0000000..0aa9f98
--- /dev/null
@@ -0,0 +1,9 @@
+// Check that mallopt does not return invalid values (ex. -1).
+// RUN: %clangxx -O2 %s -o %t && %run %t
+#include <assert.h>
+#include <malloc.h>
+
+int main() {
+  int res = mallopt(M_ARENA_MAX, 0);
+  assert(res == 0 || res == 1);
+}