summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Cross <ccross@android.com>2014-05-14 18:20:38 -0700
committerColin Cross <ccross@android.com>2014-05-14 18:24:21 -0700
commitbac600309b1aed0d55bee8c32c5031ba889ee517 (patch)
tree5c42b001719bb3ef2728dad40adec7889fa76dbf
parentfb109b894a5fc2891e49ec8e81c0dda171b45b7f (diff)
downloadextras-bac600309b1aed0d55bee8c32c5031ba889ee517.tar.gz
libpagemap: handle zero length memory regions
/proc/pid/maps may report a zero-length memory region for a 4kB PROT_GROWSDOWN region because it subtracts 4kB for the guard page. Return 0 instead of -1 when this occurs, and set range_out to NULL and len to 0. All existing callers of pm_process_pagemap_range will not dereference range_out if len is 0. Bug: 14683277 Change-Id: If405651ad034dda780b93fab2dc616e177a0b917
-rw-r--r--libpagemap/pm_process.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/libpagemap/pm_process.c b/libpagemap/pm_process.c
index d1f9bb78..dcc9a554 100644
--- a/libpagemap/pm_process.c
+++ b/libpagemap/pm_process.c
@@ -107,9 +107,15 @@ int pm_process_pagemap_range(pm_process_t *proc,
off_t off;
int error;
- if (!proc || (low >= high) || !range_out || !len)
+ if (!proc || (low > high) || !range_out || !len)
return -1;
+ if (low == high) {
+ *range_out = NULL;
+ *len = 0;
+ return 0;
+ }
+
firstpage = low / proc->ker->pagesize;
numpages = (high - low) / proc->ker->pagesize;