Silently ignore duplicate heap entries
Vendor blobs on ryu mprotect heap pages, causing a single chunk mapping to appear as multiple mappings. The heap iterator has to expand the requested range to cover the beginning of the chunk to find the chunk metadata, which will lead to duplicate identical allocations being reported from iterating over each of the split mappings. Silently ignore identical allocations, and only warn on non-identical allocations that overlap. Bug: 28269332 Change-Id: Ied2ab9270f65d00a887c7ce1a93fbf0617d69be0
This commit is contained in:
parent
ba5d9ff6d9
commit
cecd64012d
|
@ -41,11 +41,13 @@ bool HeapWalker::Allocation(uintptr_t begin, uintptr_t end) {
|
|||
return true;
|
||||
} else {
|
||||
Range overlap = inserted.first->first;
|
||||
ALOGE("range %p-%p overlaps with existing range %p-%p",
|
||||
reinterpret_cast<void*>(begin),
|
||||
reinterpret_cast<void*>(end),
|
||||
reinterpret_cast<void*>(overlap.begin),
|
||||
reinterpret_cast<void*>(overlap.end));
|
||||
if (overlap != range) {
|
||||
ALOGE("range %p-%p overlaps with existing range %p-%p",
|
||||
reinterpret_cast<void*>(begin),
|
||||
reinterpret_cast<void*>(end),
|
||||
reinterpret_cast<void*>(overlap.begin),
|
||||
reinterpret_cast<void*>(overlap.end));
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,6 +31,12 @@ struct Range {
|
|||
uintptr_t end;
|
||||
|
||||
size_t size() const { return end - begin; };
|
||||
bool operator==(const Range& other) const {
|
||||
return this->begin == other.begin && this->end == other.end;
|
||||
}
|
||||
bool operator!=(const Range& other) const {
|
||||
return !(*this == other);
|
||||
}
|
||||
};
|
||||
|
||||
// Comparator for Ranges that returns equivalence for overlapping ranges
|
||||
|
|
Loading…
Reference in New Issue