summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYabin Cui <yabinc@google.com>2023-01-17 17:44:54 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2023-01-17 17:44:54 +0000
commit92ee568d408404cbe05445088d6e45b48a46a920 (patch)
tree9499016b2138506791d755b105dc4a1014fbef05
parentd9ebe5109db6deaa698a3b3afd91f9c0a39373ca (diff)
parentbc5b789c5e4d39ec06bb320c187e53e80dac2ab3 (diff)
downloadextras-92ee568d408404cbe05445088d6e45b48a46a920.tar.gz
Merge "simpleperf: Check map range in MemAccess."
-rw-r--r--simpleperf/ETMDecoder.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/simpleperf/ETMDecoder.cpp b/simpleperf/ETMDecoder.cpp
index 7c2928c0..5e2f92e0 100644
--- a/simpleperf/ETMDecoder.cpp
+++ b/simpleperf/ETMDecoder.cpp
@@ -289,9 +289,14 @@ class MemAccess : public ITargetMemAccess {
// addr.
if (!map->in_kernel) {
data.buffer_map = map;
- data.buffer = memory == nullptr ? nullptr : (memory->getBufferStart() + map->pgoff);
data.buffer_start = map->start_addr;
data.buffer_end = map->get_end_addr();
+ if (memory != nullptr && memory->getBufferSize() > map->pgoff &&
+ (memory->getBufferSize() - map->pgoff >= map->len)) {
+ data.buffer = memory->getBufferStart() + map->pgoff;
+ } else {
+ data.buffer = nullptr;
+ }
}
}
*num_bytes = copy_size;