AllocationSize(ptr) should check that |ptr| actually points to the beginning of the chunk it belongs to.
Fixes http://code.google.com/p/address-sanitizer/issues/detail?id=86



git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@161320 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/asan/asan_allocator.cc b/lib/asan/asan_allocator.cc
index 352cce0..b9c1942 100644
--- a/lib/asan/asan_allocator.cc
+++ b/lib/asan/asan_allocator.cc
@@ -377,10 +377,11 @@
     if (!ptr) return 0;
     ScopedLock lock(&mu_);
 
-    // first, check if this is our memory
-    PageGroup *g = FindPageGroupUnlocked(ptr);
-    if (!g) return 0;
-    AsanChunk *m = PtrToChunk(ptr);
+    // Make sure this is our chunk and |ptr| actually points to the beginning
+    // of the allocated memory.
+    AsanChunk *m = FindChunkByAddr(ptr);
+    if (!m || m->Beg() != ptr) return 0;
+
     if (m->chunk_state == CHUNK_ALLOCATED) {
       return m->used_size;
     } else {