summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorReid Kleckner <rnk@google.com>2017-01-24 17:45:35 +0000
committerReid Kleckner <rnk@google.com>2017-01-24 17:45:35 +0000
commit310c3d3d26b81a816119e2e3d3fc9d03a75ee075 (patch)
treec80aafcc372dff81dd693e181b85c80c36d38006
parent7784cacd91282e692a2be87015117188fa1990c1 (diff)
downloadbcm5719-llvm-310c3d3d26b81a816119e2e3d3fc9d03a75ee075.tar.gz
bcm5719-llvm-310c3d3d26b81a816119e2e3d3fc9d03a75ee075.zip
Fix pc_array bounds check to use elements instead of bytes
pc_array_size and kPcArrayMaxSize appear to be measured in elements, not bytes, so we shouldn't multiply idx by sizeof(uptr) in this bounds check. 32-bit Chrome was tripping this assertion because it has 64 million coverage points. I don't think it's worth adding a test that has that many coverage points. llvm-svn: 292955
-rw-r--r--compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc3
1 files changed, 1 insertions, 2 deletions
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc b/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc
index ebdee33d7d5..497bdcb88c0 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc
@@ -415,8 +415,7 @@ void CoverageData::Add(uptr pc, u32 *guard) {
uptr idx = -guard_value - 1;
if (idx >= atomic_load(&pc_array_index, memory_order_acquire))
return; // May happen after fork when pc_array_index becomes 0.
- CHECK_LT(idx * sizeof(uptr),
- atomic_load(&pc_array_size, memory_order_acquire));
+ CHECK_LT(idx, atomic_load(&pc_array_size, memory_order_acquire));
uptr counter = atomic_fetch_add(&coverage_counter, 1, memory_order_relaxed);
pc_array[idx] = BundlePcAndCounter(pc, counter);
}
OpenPOWER on IntegriCloud