[PATCH] D33784: Bug 33206 - Sanitizer CHECK failed: ((allocated_for_dlsym)) < ((kDlsymAllocPoolSize)) (1036, 1024)) with preload
Denis Khalikov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jun 5 04:09:31 PDT 2017
denis13 updated this revision to Diff 101385.
denis13 added a comment.
Updated regarding to Evgenii Stepanov and Maxim Ostapenko comments.
https://reviews.llvm.org/D33784
Files:
lib/asan/asan_malloc_linux.cc
Index: lib/asan/asan_malloc_linux.cc
===================================================================
--- lib/asan/asan_malloc_linux.cc
+++ lib/asan/asan_malloc_linux.cc
@@ -60,17 +60,21 @@
#endif // SANITIZER_INTERCEPT_CFREE
INTERCEPTOR(void*, malloc, uptr size) {
- if (UNLIKELY(!asan_inited))
- // Hack: dlsym calls malloc before REAL(malloc) is retrieved from dlsym.
+ if (UNLIKELY(asan_init_is_running))
+ // Hack: dlsym calls malloc before REAL(malloc) is retrieved from dlsym
return AllocateFromLocalPool(size);
+ if (UNLIKELY(!asan_inited))
+ AsanInitFromRtl();
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);
+ if (UNLIKELY(!asan_inited))
+ AsanInitFromRtl();
GET_STACK_TRACE_MALLOC;
return asan_calloc(nmemb, size, &stack);
}
@@ -78,18 +82,14 @@
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);
- void *new_ptr;
- if (UNLIKELY(!asan_inited)) {
- new_ptr = AllocateFromLocalPool(size);
- } else {
- copy_size = size;
- new_ptr = asan_malloc(copy_size, &stack);
- }
+ const uptr offset = (uptr)ptr - (uptr)alloc_memory_for_dlsym;
+ const uptr copy_size = Min(size, kDlsymAllocPoolSize - offset);
+ void *new_ptr = LIKELY(asan_inited) ? asan_malloc(size, &stack)
+ : AllocateFromLocalPool(size);
internal_memcpy(new_ptr, ptr, copy_size);
return new_ptr;
}
+ if (UNLIKELY(!asan_inited)) AsanInitFromRtl();
return asan_realloc(ptr, size, &stack);
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D33784.101385.patch
Type: text/x-patch
Size: 1954 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170605/d82037c4/attachment.bin>
More information about the llvm-commits
mailing list