unwindstack: fix dangling pointer in LocalUpdatableMaps.

Previously, when reparsing /proc/self/maps, we would remove duplicate
MapInfo entries, but leave the following entry's prev_map pointing
toward the soon-to-be-deleted MapInfo, leading to explosions.

Test: libunwindstack_test
Test: booted with libfdtrack.so preloaded
Change-Id: Ibfb7a8712540fe3aaadc10e9c31938f6ecddf17b
This commit is contained in:
Josh Gao 2019-11-14 17:33:12 -08:00
parent bace5995f1
commit 8a243118db

View file

@ -139,6 +139,9 @@ bool LocalUpdatableMaps::Reparse() {
if (start == info->start && end == info->end && flags == info->flags && *name == info->name) {
// No need to check
search_map_idx = old_map_idx + 1;
if (new_map_idx + 1 < maps_.size()) {
maps_[new_map_idx + 1]->prev_map = info.get();
}
maps_[new_map_idx] = nullptr;
total_entries--;
break;