From a83e96cc1cc48c6c229d9462ab13ef6479a84143 Mon Sep 17 00:00:00 2001 From: Arun Sharma Date: Sun, 23 Jan 2011 17:55:55 -0800 Subject: [PATCH] Some entries in /proc//maps are not ELF files, so add check in elf_map_image() to ensure mapped files have a valid ELF header. Signed-off-by: Zachary T Welch Signed-off-by: Arun Sharma --- src/elfxx.h | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/elfxx.h b/src/elfxx.h index 7742806b..e316970b 100644 --- a/src/elfxx.h +++ b/src/elfxx.h @@ -43,6 +43,12 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ # define elf_w(x) _Uelf64_##x #endif +extern int elf_w (valid_object) (struct elf_image *ei); +extern int elf_w (get_proc_name) (unw_addr_space_t as, + pid_t pid, unw_word_t ip, + char *buf, size_t len, + unw_word_t *offp); + static inline int elf_map_image (struct elf_image *ei, const char *path) { @@ -65,11 +71,11 @@ elf_map_image (struct elf_image *ei, const char *path) if (ei->image == MAP_FAILED) return -1; + if (!elf_w (valid_object) (ei)) + { + munmap(ei->image, ei->size); + return -1; + } + return 0; } - -extern int elf_w (valid_object) (struct elf_image *ei); -extern int elf_w (get_proc_name) (unw_addr_space_t as, - pid_t pid, unw_word_t ip, - char *buf, size_t len, - unw_word_t *offp);