From 4197fa23ada9682343a15b68dde08c0249db172a Mon Sep 17 00:00:00 2001 From: Evgeniy Stepanov Date: Tue, 5 Nov 2013 01:24:38 +0000 Subject: [msan] Fix a very unfortunate typo in origin copying. It was causing randomly missing origins. git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@194036 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/msan/msan_interceptors.cc | 6 +++--- lib/msan/tests/msan_test.cc | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/msan/msan_interceptors.cc b/lib/msan/msan_interceptors.cc index 0e2db9cb..dd4b43b7 100644 --- a/lib/msan/msan_interceptors.cc +++ b/lib/msan/msan_interceptors.cc @@ -1348,7 +1348,7 @@ u32 get_origin_if_poisoned(uptr a, uptr size) { unsigned char *s = (unsigned char *)MEM_TO_SHADOW(a); for (uptr i = 0; i < size; ++i) if (s[i]) - return *(uptr *)SHADOW_TO_ORIGIN((s + i) & ~3UL); + return *(u32 *)SHADOW_TO_ORIGIN((s + i) & ~3UL); return 0; } @@ -1361,7 +1361,7 @@ void __msan_copy_origin(void *dst, const void *src, uptr size) { if (beg < d) { u32 o = get_origin_if_poisoned(beg, d - beg); if (o) - *(uptr *)MEM_TO_ORIGIN(beg) = o; + *(u32 *)MEM_TO_ORIGIN(beg) = o; beg += 4; } @@ -1370,7 +1370,7 @@ void __msan_copy_origin(void *dst, const void *src, uptr size) { if (end > d + size) { u32 o = get_origin_if_poisoned(d + size, end - d - size); if (o) - *(uptr *)MEM_TO_ORIGIN(end - 4) = o; + *(u32 *)MEM_TO_ORIGIN(end - 4) = o; end -= 4; } diff --git a/lib/msan/tests/msan_test.cc b/lib/msan/tests/msan_test.cc index 406808af..f95bb4e7 100644 --- a/lib/msan/tests/msan_test.cc +++ b/lib/msan/tests/msan_test.cc @@ -1300,8 +1300,8 @@ void TestUnalignedMemcpy(int left, int right, bool src_is_aligned) { } TEST(MemorySanitizer, memcpy_unaligned) { - for (int i = 0; i < 4; ++i) { - for (int j = 0; j < 4; ++j) { + for (int i = 0; i < 10; ++i) { + for (int j = 0; j < 10; ++j) { TestUnalignedMemcpy(i, j, true); TestUnalignedMemcpy(i, j, false); } -- cgit v1.2.3