Add lock when iterating over BacktraceMap.
In order to avoid a race condition in the maps data, acquire
a read lock while iterating over the maps data.
Bug: 29387050
Bug: 31067025
(cherry picked from commit 56f8b5631ab2874dc2ec385802e38555acac0d90)
Change-Id: I48ecd2705b4aa4eedfed1daae2eb3b9b8bf8dda9
diff --git a/runtime/mem_map.cc b/runtime/mem_map.cc
index 5d89c21..20c6112 100644
--- a/runtime/mem_map.cc
+++ b/runtime/mem_map.cc
@@ -157,6 +157,8 @@
}
return false;
}
+
+ ScopedBacktraceMapIteratorLock lock(map.get());
for (BacktraceMap::const_iterator it = map->begin(); it != map->end(); ++it) {
if ((begin >= it->start && begin < it->end) // start of new within old
&& (end > it->start && end <= it->end)) { // end of new within old
@@ -180,6 +182,7 @@
*error_msg = StringPrintf("Failed to build process map");
return false;
}
+ ScopedBacktraceMapIteratorLock(map.get());
for (BacktraceMap::const_iterator it = map->begin(); it != map->end(); ++it) {
if ((begin >= it->start && begin < it->end) // start of new within old
|| (end > it->start && end < it->end) // end of new within old