From 16f4e85860efcccbadca5d0a00a3872244efae08 Mon Sep 17 00:00:00 2001 From: Steven Wu Date: Thu, 15 Aug 2024 12:50:03 -0700 Subject: [PATCH] Revert "[sanitizer] Remove GetCurrentThread nullness checks from Allocate" This reverts commit 4411d1e3926d67c393e6a7bdb910bbe77507ff26 for breaking Darwin bots: AddressSanitizer-Unit :: ./Asan-x86_64-calls-Noinst-Test/10/16 AddressSanitizer-Unit :: ./Asan-x86_64-calls-Noinst-Test/12/16 AddressSanitizer-Unit :: ./Asan-x86_64-calls-Noinst-Test/13/16 AddressSanitizer-Unit :: ./Asan-x86_64-inline-Noinst-Test/10/16 AddressSanitizer-Unit :: ./Asan-x86_64-inline-Noinst-Test/12/16 AddressSanitizer-Unit :: ./Asan-x86_64-inline-Noinst-Test/13/16 AddressSanitizer-Unit :: ./Asan-x86_64h-calls-Noinst-Test/10/16 AddressSanitizer-Unit :: ./Asan-x86_64h-calls-Noinst-Test/12/16 AddressSanitizer-Unit :: ./Asan-x86_64h-calls-Noinst-Test/13/16 AddressSanitizer-Unit :: ./Asan-x86_64h-inline-Noinst-Test/10/16 AddressSanitizer-Unit :: ./Asan-x86_64h-inline-Noinst-Test/12/16 AddressSanitizer-Unit :: ./Asan-x86_64h-inline-Noinst-Test/13/16 --- compiler-rt/lib/asan/asan_allocator.cpp | 11 +++++++++-- compiler-rt/lib/msan/msan_allocator.cpp | 11 +++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/compiler-rt/lib/asan/asan_allocator.cpp b/compiler-rt/lib/asan/asan_allocator.cpp index e041861edaf0..9e66f77217ec 100644 --- a/compiler-rt/lib/asan/asan_allocator.cpp +++ b/compiler-rt/lib/asan/asan_allocator.cpp @@ -576,8 +576,15 @@ struct Allocator { } AsanThread *t = GetCurrentThread(); - void *allocated = allocator.Allocate( - GetAllocatorCache(&t->malloc_storage()), needed_size, 8); + void *allocated; + if (t) { + AllocatorCache *cache = GetAllocatorCache(&t->malloc_storage()); + allocated = allocator.Allocate(cache, needed_size, 8); + } else { + SpinMutexLock l(&fallback_mutex); + AllocatorCache *cache = &fallback_allocator_cache; + allocated = allocator.Allocate(cache, needed_size, 8); + } if (UNLIKELY(!allocated)) { SetAllocatorOutOfMemory(); if (AllocatorMayReturnNull()) diff --git a/compiler-rt/lib/msan/msan_allocator.cpp b/compiler-rt/lib/msan/msan_allocator.cpp index f478b9979f2d..d7d4967c9498 100644 --- a/compiler-rt/lib/msan/msan_allocator.cpp +++ b/compiler-rt/lib/msan/msan_allocator.cpp @@ -199,8 +199,15 @@ static void *MsanAllocate(BufferedStackTrace *stack, uptr size, uptr alignment, ReportRssLimitExceeded(stack); } MsanThread *t = GetCurrentThread(); - void *allocated = allocator.Allocate(GetAllocatorCache(&t->malloc_storage()), - size, alignment); + void *allocated; + if (t) { + AllocatorCache *cache = GetAllocatorCache(&t->malloc_storage()); + allocated = allocator.Allocate(cache, size, alignment); + } else { + SpinMutexLock l(&fallback_mutex); + AllocatorCache *cache = &fallback_allocator_cache; + allocated = allocator.Allocate(cache, size, alignment); + } if (UNLIKELY(!allocated)) { SetAllocatorOutOfMemory(); if (AllocatorMayReturnNull())