[PATCH] D33784: Bug 33206 - Sanitizer CHECK failed: ((allocated_for_dlsym)) < ((kDlsymAllocPoolSize)) (1036, 1024)) with preload

Phabricator via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Jun 9 00:48:14 PDT 2017


This revision was automatically updated to reflect the committed changes.
Closed by commit rL305058: [asan] Fix ASan internal failure in AllocateFromLocalPool (authored by chefmax).

Changed prior to commit:
  https://reviews.llvm.org/D33784?vs=101867&id=102000#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D33784

Files:
  compiler-rt/trunk/lib/asan/asan_malloc_linux.cc
  compiler-rt/trunk/test/asan/TestCases/Linux/asan_preload_test-3.cc


Index: compiler-rt/trunk/test/asan/TestCases/Linux/asan_preload_test-3.cc
===================================================================
--- compiler-rt/trunk/test/asan/TestCases/Linux/asan_preload_test-3.cc
+++ compiler-rt/trunk/test/asan/TestCases/Linux/asan_preload_test-3.cc
@@ -0,0 +1,33 @@
+// Regression test for PR33206
+//
+// RUN: %clang -DDYN=1 -DMALLOC=1 -fPIC -shared %s -o %t-dso1.so
+// RUN: %clang -DDYN=1 -DMALLOC=1 -fPIC -shared %s -o %t-dso2.so %t-dso1.so
+// RUN: %clang %s -o %t-1 %t-dso2.so
+// RUN: env LD_PRELOAD=%shared_libasan %run %t-1 2>&1 | FileCheck %s
+// RUN: %clang -DDYN=1 -DREALLOC=1 -fPIC -shared %s -o %t-dso3.so
+// RUN: %clang -DDYN=1 -DREALLOC=1 -fPIC -shared %s -o %t-dso4.so %t-dso3.so
+// RUN: %clang %s -o %t-2 %t-dso4.so
+// RUN: env LD_PRELOAD=%shared_libasan %run %t-2 2>&1 | FileCheck %s
+// REQUIRES: asan-dynamic-runtime
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#ifdef DYN
+__attribute__((constructor)) void foo() {
+  void *p;
+#ifdef MALLOC
+  p = malloc(1 << 20);
+#endif
+#ifdef REALLOC
+  p = realloc (0, 1 << 20);
+#endif
+  free(p);
+}
+#else
+int main() {
+  // CHECK: Success
+  printf("Success\n");
+  return 0;
+}
+#endif
Index: compiler-rt/trunk/lib/asan/asan_malloc_linux.cc
===================================================================
--- compiler-rt/trunk/lib/asan/asan_malloc_linux.cc
+++ compiler-rt/trunk/lib/asan/asan_malloc_linux.cc
@@ -60,36 +60,42 @@
 #endif // SANITIZER_INTERCEPT_CFREE
 
 INTERCEPTOR(void*, malloc, uptr size) {
-  if (UNLIKELY(!asan_inited))
+  if (UNLIKELY(asan_init_is_running))
     // Hack: dlsym calls malloc before REAL(malloc) is retrieved from dlsym.
     return AllocateFromLocalPool(size);
+  ENSURE_ASAN_INITED();
   GET_STACK_TRACE_MALLOC;
   return asan_malloc(size, &stack);
 }
 
 INTERCEPTOR(void*, calloc, uptr nmemb, uptr size) {
-  if (UNLIKELY(!asan_inited))
+  if (UNLIKELY(asan_init_is_running))
     // Hack: dlsym calls calloc before REAL(calloc) is retrieved from dlsym.
     return AllocateFromLocalPool(nmemb * size);
+  ENSURE_ASAN_INITED();
   GET_STACK_TRACE_MALLOC;
   return asan_calloc(nmemb, size, &stack);
 }
 
 INTERCEPTOR(void*, realloc, void *ptr, uptr size) {
-  GET_STACK_TRACE_MALLOC;
   if (UNLIKELY(IsInDlsymAllocPool(ptr))) {
-    uptr offset = (uptr)ptr - (uptr)alloc_memory_for_dlsym;
-    uptr copy_size = Min(size, kDlsymAllocPoolSize - offset);
+    const uptr offset = (uptr)ptr - (uptr)alloc_memory_for_dlsym;
+    const uptr copy_size = Min(size, kDlsymAllocPoolSize - offset);
     void *new_ptr;
-    if (UNLIKELY(!asan_inited)) {
+    if (UNLIKELY(asan_init_is_running)) {
       new_ptr = AllocateFromLocalPool(size);
     } else {
-      copy_size = size;
-      new_ptr = asan_malloc(copy_size, &stack);
+      ENSURE_ASAN_INITED();
+      GET_STACK_TRACE_MALLOC;
+      new_ptr = asan_malloc(size, &stack);
     }
     internal_memcpy(new_ptr, ptr, copy_size);
     return new_ptr;
   }
+  if (UNLIKELY(asan_init_is_running))
+    return AllocateFromLocalPool(size);
+  ENSURE_ASAN_INITED();
+  GET_STACK_TRACE_MALLOC;
   return asan_realloc(ptr, size, &stack);
 }
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D33784.102000.patch
Type: text/x-patch
Size: 3134 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170609/434e40bc/attachment-0001.bin>


More information about the llvm-commits mailing list