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
diff --git a/libpagemap/pm_process.c b/libpagemap/pm_process.c
index d1f9bb7..dcc9a55 100644
--- a/libpagemap/pm_process.c
+++ b/libpagemap/pm_process.c
@@ -107,9 +107,15 @@
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;