diff options
author | Colin Cross <ccross@android.com> | 2011-07-13 13:49:01 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-07-13 13:49:01 -0700 |
commit | 3604d4b7672cde67a88e064393d013fefe484156 (patch) | |
tree | 3aa9fe075bbca19ece6b80d3996124fca20c4aa4 | |
parent | 3f54dc180d580c9e104d07ab5bc830e7953be502 (diff) | |
parent | 6620157c0f583c4c7a59d1d595589dbb2b3ae4b5 (diff) | |
download | extras-3604d4b7672cde67a88e064393d013fefe484156.tar.gz |
Merge "Handle EOF when reading /proc/<pid>/pagemap"
-rw-r--r-- | libpagemap/pm_process.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/libpagemap/pm_process.c b/libpagemap/pm_process.c index 0f54b481..b3c077ee 100644 --- a/libpagemap/pm_process.c +++ b/libpagemap/pm_process.c @@ -116,7 +116,13 @@ int pm_process_pagemap_range(pm_process_t *proc, return error; } error = read(proc->pagemap_fd, (char*)range, numpages * sizeof(uint64_t)); - if (error < numpages * sizeof(uint64_t)) { + if (error == 0) { + /* EOF, mapping is not in userspace mapping range (probably vectors) */ + *len = 0; + free(range); + *range_out = NULL; + return 0; + } else if (error < 0 || (error > 0 && error < numpages * sizeof(uint64_t))) { error = (error < 0) ? errno : -1; free(range); return error; @@ -258,9 +264,6 @@ static int read_maps(pm_process_t *proc) { sscanf(line, "%lx-%lx %s %lx %*s %*d %" S(MAX_LINE) "s", &map->start, &map->end, perms, &map->offset, name); - if (!strcmp(name, "[vectors]")) - continue; - map->name = malloc(strlen(name) + 1); if (!map->name) { error = errno; |