[compiler-rt] 1d70984 - [Asan] Accept __lsan_ignore_object for redzone pointer

Vitaly Buka via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 14 16:32:42 PDT 2020


Author: Vitaly Buka
Date: 2020-09-14T16:32:32-07:00
New Revision: 1d70984fa220f966ddcecd7906c5f10368fe1b93

URL: https://github.com/llvm/llvm-project/commit/1d70984fa220f966ddcecd7906c5f10368fe1b93
DIFF: https://github.com/llvm/llvm-project/commit/1d70984fa220f966ddcecd7906c5f10368fe1b93.diff

LOG: [Asan] Accept __lsan_ignore_object for redzone pointer

The check that the pointer inside of the user part of the chunk does not
adds any value, but it's the last user of AddrIsInside.

I'd like to simplify AsanChunk in followup patches.

Reviewed By: morehouse

Differential Revision: https://reviews.llvm.org/D87642

Added: 
    

Modified: 
    compiler-rt/lib/asan/asan_allocator.cpp
    compiler-rt/test/asan/TestCases/lsan_annotations.cpp

Removed: 
    


################################################################################
diff  --git a/compiler-rt/lib/asan/asan_allocator.cpp b/compiler-rt/lib/asan/asan_allocator.cpp
index e4028dc10f48..5aeb4d14e9a3 100644
--- a/compiler-rt/lib/asan/asan_allocator.cpp
+++ b/compiler-rt/lib/asan/asan_allocator.cpp
@@ -162,9 +162,6 @@ class AsanChunk : public ChunkBase {
     }
     return reinterpret_cast<void*>(Beg() - RZLog2Size(rz_log));
   }
-  bool AddrIsInside(uptr addr, bool locked_version = false) {
-    return (addr >= Beg()) && (addr < Beg() + UsedSize(locked_version));
-  }
 };
 
 struct QuarantineCallback {
@@ -1172,16 +1169,14 @@ void ForEachChunk(ForEachChunkCallback callback, void *arg) {
 IgnoreObjectResult IgnoreObjectLocked(const void *p) {
   uptr addr = reinterpret_cast<uptr>(p);
   __asan::AsanChunk *m = __asan::instance.GetAsanChunkByAddr(addr);
-  if (!m) return kIgnoreObjectInvalid;
-  if ((atomic_load(&m->chunk_state, memory_order_acquire) ==
-       __asan::CHUNK_ALLOCATED) &&
-      m->AddrIsInside(addr)) {
-    if (m->lsan_tag == kIgnored)
-      return kIgnoreObjectAlreadyIgnored;
-    m->lsan_tag = __lsan::kIgnored;
-    return kIgnoreObjectSuccess;
+  if (!m || (atomic_load(&m->chunk_state, memory_order_acquire) !=
+             __asan::CHUNK_ALLOCATED)) {
+    return kIgnoreObjectInvalid;
   }
-  return kIgnoreObjectInvalid;
+  if (m->lsan_tag == kIgnored)
+    return kIgnoreObjectAlreadyIgnored;
+  m->lsan_tag = __lsan::kIgnored;
+  return kIgnoreObjectSuccess;
 }
 }  // namespace __lsan
 

diff  --git a/compiler-rt/test/asan/TestCases/lsan_annotations.cpp b/compiler-rt/test/asan/TestCases/lsan_annotations.cpp
index f52b0ff66a8d..ce7c19b8f2d0 100644
--- a/compiler-rt/test/asan/TestCases/lsan_annotations.cpp
+++ b/compiler-rt/test/asan/TestCases/lsan_annotations.cpp
@@ -5,12 +5,20 @@
 #include <sanitizer/lsan_interface.h>
 #include <stdlib.h>
 
+int *x, *y, *z;
+
 int main() {
-  int *x = new int;
+  x = new int;
   __lsan_ignore_object(x);
+
   {
     __lsan::ScopedDisabler disabler;
-    double *y = new double;
+    y = new int;
   }
+
+  z = new int;
+  __lsan_ignore_object(z - 1);
+
+  x = y = z = nullptr;
   return 0;
 }


        


More information about the llvm-commits mailing list