http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55975



--- Comment #11 from Andreas Schwab <sch...@linux-m68k.org> 2013-01-17 23:23:47 
UTC ---

There are two off-by-one:



diff --git a/libsanitizer/asan/asan_poisoning.cc

b/libsanitizer/asan/asan_poisoning.cc

index a00baff..bbbaf0a 100644

--- a/libsanitizer/asan/asan_poisoning.cc

+++ b/libsanitizer/asan/asan_poisoning.cc

@@ -23,7 +23,7 @@ void PoisonShadow(uptr addr, uptr size, u8 value) {

   CHECK(AddrIsAlignedByGranularity(addr));

   CHECK(AddrIsAlignedByGranularity(addr + size));

   uptr shadow_beg = MemToShadow(addr);

-  uptr shadow_end = MemToShadow(addr + size);

+  uptr shadow_end = MemToShadow(addr + size - 1) + 1;

   CHECK(REAL(memset) != 0);

   REAL(memset)((void*)shadow_beg, value, shadow_end - shadow_beg);

 }

diff --git a/libsanitizer/asan/asan_thread.cc

b/libsanitizer/asan/asan_thread.cc

index cc2e777..02f49dd 100644

--- a/libsanitizer/asan/asan_thread.cc

+++ b/libsanitizer/asan/asan_thread.cc

@@ -72,7 +72,7 @@ void AsanThread::Destroy() {

 void AsanThread::Init() {

   SetThreadStackTopAndBottom();

   CHECK(AddrIsInMem(stack_bottom_));

-  CHECK(AddrIsInMem(stack_top_));

+  CHECK(AddrIsInMem(stack_top_ - 1));

   ClearShadowForThreadStack();

   if (flags()->verbosity >= 1) {

     int local = 0;

Reply via email to