diff options
author | Colin Cross <ccross@android.com> | 2014-05-14 18:20:38 -0700 |
---|---|---|
committer | Colin Cross <ccross@android.com> | 2014-05-14 18:24:21 -0700 |
commit | bac600309b1aed0d55bee8c32c5031ba889ee517 (patch) | |
tree | 5c42b001719bb3ef2728dad40adec7889fa76dbf | |
parent | fb109b894a5fc2891e49ec8e81c0dda171b45b7f (diff) | |
download | extras-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.c | 8 |
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; |