[llvm-commits] [compiler-rt] r148394 - in /compiler-rt/trunk/lib/asan: asan_allocator.cc asan_interface.h tests/asan_interface_test.cc
Alexey Samsonov
samsonov at google.com
Wed Jan 18 07:26:55 PST 2012
Author: samsonov
Date: Wed Jan 18 09:26:55 2012
New Revision: 148394
URL: http://llvm.org/viewvc/llvm-project?rev=148394&view=rev
Log:
AddressSanitizer: return false instead of true for __asan_get_ownership(NULL)
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
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=148394&r1=148393&r2=148394&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_allocator.cc (original)
+++ compiler-rt/trunk/lib/asan/asan_allocator.cc Wed Jan 18 09:26:55 2012
@@ -341,6 +341,7 @@
// page_groups_ grows. This can be fixed by increasing kMinMmapSize,
// but a better solution is to speed up the search somehow.
size_t AllocationSize(uintptr_t ptr) {
+ if (!ptr) return 0;
ScopedLock lock(&mu_);
// first, check if this is our memory
@@ -811,22 +812,11 @@
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) {
- size_t usable_size;
- bool owned;
- GetAllocationSizeAndOwnership(ptr, &usable_size, &owned);
- if (!owned) {
+ CHECK(stack);
+ if (ptr == NULL) return 0;
+ size_t usable_size = malloc_info.AllocationSize((uintptr_t)ptr);
+ if (usable_size == 0) {
Report("ERROR: AddressSanitizer attempting to call malloc_usable_size() "
"for pointer which is not owned: %p\n", ptr);
stack->PrintStack();
@@ -837,9 +827,7 @@
}
size_t asan_mz_size(const void *ptr) {
- size_t mz_size;
- GetAllocationSizeAndOwnership(ptr, &mz_size, NULL);
- return mz_size;
+ return malloc_info.AllocationSize((uintptr_t)ptr);
}
void DescribeHeapAddress(uintptr_t addr, uintptr_t access_size) {
@@ -1026,17 +1014,14 @@
}
bool __asan_get_ownership(const void *p) {
- bool owned;
- GetAllocationSizeAndOwnership(p, NULL, &owned);
- return owned;
+ return malloc_info.AllocationSize((uintptr_t)p) > 0;
}
size_t __asan_get_allocated_size(const void *p) {
- size_t allocated_size;
- bool owned;
- GetAllocationSizeAndOwnership(p, &allocated_size, &owned);
+ if (p == NULL) return 0;
+ size_t allocated_size = malloc_info.AllocationSize((uintptr_t)p);
// Die if p is not malloced or if it is already freed.
- if (!owned) {
+ if (allocated_size == 0) {
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=148394&r1=148393&r2=148394&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/asan_interface.h (original)
+++ compiler-rt/trunk/lib/asan/asan_interface.h Wed Jan 18 09:26:55 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 is NULL or if p was returned by the ASan allocator and
+ // Returns true 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 (get_ownership(p) == true).
+ // Requires (get_ownership(p) == true) or (p == NULL).
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=148394&r1=148393&r2=148394&view=diff
==============================================================================
--- compiler-rt/trunk/lib/asan/tests/asan_interface_test.cc (original)
+++ compiler-rt/trunk/lib/asan/tests/asan_interface_test.cc Wed Jan 18 09:26:55 2012
@@ -50,8 +50,8 @@
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));
+ // NULL is not owned, but is a valid argument for __asan_get_allocated_size().
+ EXPECT_EQ(false, __asan_get_ownership(NULL));
EXPECT_EQ(0, __asan_get_allocated_size(NULL));
// When memory is freed, it's not owned, and call to GetAllocatedSize
More information about the llvm-commits
mailing list