[llvm-commits] [compiler-rt] r148305 - in /compiler-rt/trunk/lib/asan: asan_allocator.cc asan_interface.h tests/asan_interface_test.cc tests/asan_test.cc

Alexey Samsonov samsonov at google.com
Tue Jan 17 06:01:15 PST 2012


Author: samsonov
Date: Tue Jan 17 08:01:15 2012
New Revision: 148305

URL: http://llvm.org/viewvc/llvm-project?rev=148305&view=rev
Log:
Revert commit 148304

Modified:
    compiler-rt/trunk/lib/asan/asan_allocator.cc
    compiler-rt/trunk/lib/asan/asan_interface.h
    compiler-rt/trunk/lib/asan/tests/asan_interface_test.cc
    compiler-rt/trunk/lib/asan/tests/asan_test.cc

Modified: compiler-rt/trunk/lib/asan/asan_allocator.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_allocator.cc?rev=148305&r1=148304&r2=148305&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_allocator.cc (original)
+++ compiler-rt/trunk/lib/asan/asan_allocator.cc Tue Jan 17 08:01:15 2012
@@ -811,10 +811,22 @@
   return 0;
 }
 
+static void GetAllocationSizeAndOwnership(const void *ptr, size_t *size,
+                                          bool *owned) {
+  size_t allocation_size = malloc_info.AllocationSize((uintptr_t)ptr);
+  if (size != NULL) {
+    *size = allocation_size;
+  }
+  if (owned != NULL) {
+    *owned = (ptr == NULL) || (allocation_size > 0);
+  }
+}
+
 size_t asan_malloc_usable_size(void *ptr, AsanStackTrace *stack) {
-  CHECK(stack);
-  size_t usable_size = malloc_info.AllocationSize((uintptr_t)ptr);
-  if (usable_size == 0) {
+  size_t usable_size;
+  bool owned;
+  GetAllocationSizeAndOwnership(ptr, &usable_size, &owned);
+  if (!owned) {
     Report("ERROR: AddressSanitizer attempting to call malloc_usable_size() "
            "for pointer which is not owned: %p\n", ptr);
     stack->PrintStack();
@@ -825,7 +837,9 @@
 }
 
 size_t asan_mz_size(const void *ptr) {
-  return malloc_info.AllocationSize((uintptr_t)ptr);
+  size_t mz_size;
+  GetAllocationSizeAndOwnership(ptr, &mz_size, NULL);
+  return mz_size;
 }
 
 void DescribeHeapAddress(uintptr_t addr, uintptr_t access_size) {
@@ -1012,13 +1026,17 @@
 }
 
 bool __asan_get_ownership(const void *p) {
-  return malloc_info.AllocationSize((uintptr_t)p) > 0;
+  bool owned;
+  GetAllocationSizeAndOwnership(p, NULL, &owned);
+  return owned;
 }
 
 size_t __asan_get_allocated_size(const void *p) {
-  size_t allocated_size = malloc_info.AllocationSize((uintptr_t)p);
+  size_t allocated_size;
+  bool owned;
+  GetAllocationSizeAndOwnership(p, &allocated_size, &owned);
   // Die if p is not malloced or if it is already freed.
-  if (allocated_size == 0) {
+  if (!owned) {
     Report("ERROR: AddressSanitizer attempting to call "
            "__asan_get_allocated_size() for pointer which is "
            "not owned: %p\n", p);

Modified: compiler-rt/trunk/lib/asan/asan_interface.h
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_interface.h?rev=148305&r1=148304&r2=148305&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_interface.h (original)
+++ compiler-rt/trunk/lib/asan/asan_interface.h Tue Jan 17 08:01:15 2012
@@ -107,11 +107,11 @@
   // memory, returns the maximal possible allocation size, otherwise returns
   // "size".
   size_t __asan_get_estimated_allocated_size(size_t size);
-  // Returns true if p was returned by the ASan allocator and
+  // Returns true if p is NULL or if p was returned by the ASan allocator and
   // is not yet freed.
   bool __asan_get_ownership(const void *p);
   // Returns the number of bytes reserved for the pointer p.
-  // Requires (__asan_get_ownership(p) == true).
+  // Requires (get_ownership(p) == true).
   size_t __asan_get_allocated_size(const void *p);
   // Number of bytes, allocated and not yet freed by the application.
   size_t __asan_get_current_allocated_bytes();

Modified: compiler-rt/trunk/lib/asan/tests/asan_interface_test.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/tests/asan_interface_test.cc?rev=148305&r1=148304&r2=148305&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/tests/asan_interface_test.cc (original)
+++ compiler-rt/trunk/lib/asan/tests/asan_interface_test.cc Tue Jan 17 08:01:15 2012
@@ -44,14 +44,16 @@
   // We cannot call GetAllocatedSize from the memory we didn't map,
   // and from the interior pointers (not returned by previous malloc).
   void *wild_addr = (void*)0x1;
-  EXPECT_EQ(false, __asan_get_ownership(NULL));
-  EXPECT_DEATH(__asan_get_allocated_size(NULL), kGetAllocatedSizeErrorMsg);
   EXPECT_EQ(false, __asan_get_ownership(wild_addr));
   EXPECT_DEATH(__asan_get_allocated_size(wild_addr), kGetAllocatedSizeErrorMsg);
   EXPECT_EQ(false, __asan_get_ownership(array + kArraySize / 2));
   EXPECT_DEATH(__asan_get_allocated_size(array + kArraySize / 2),
                kGetAllocatedSizeErrorMsg);
 
+  // NULL is a valid argument and is owned.
+  EXPECT_EQ(true, __asan_get_ownership(NULL));
+  EXPECT_EQ(0, __asan_get_allocated_size(NULL));
+
   // When memory is freed, it's not owned, and call to GetAllocatedSize
   // is forbidden.
   free(array);

Modified: compiler-rt/trunk/lib/asan/tests/asan_test.cc
URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/tests/asan_test.cc?rev=148305&r1=148304&r2=148305&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/tests/asan_test.cc (original)
+++ compiler-rt/trunk/lib/asan/tests/asan_test.cc Tue Jan 17 08:01:15 2012
@@ -528,9 +528,9 @@
   const size_t kArraySize = 100;
   char *array = Ident((char*)malloc(kArraySize));
   int *int_ptr = Ident(new int);
+  EXPECT_EQ(0, malloc_usable_size(NULL));
   EXPECT_EQ(kArraySize, malloc_usable_size(array));
   EXPECT_EQ(sizeof(int), malloc_usable_size(int_ptr));
-  EXPECT_DEATH(malloc_usable_size(NULL), kMallocUsableSizeErrorMsg);
   EXPECT_DEATH(malloc_usable_size((void*)0x123), kMallocUsableSizeErrorMsg);
   EXPECT_DEATH(malloc_usable_size(array + kArraySize / 2),
                kMallocUsableSizeErrorMsg);





More information about the llvm-commits mailing list