diff options
Diffstat (limited to 'usr/src/lib/libproc/common/Pidle.c')
-rw-r--r-- | usr/src/lib/libproc/common/Pidle.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/usr/src/lib/libproc/common/Pidle.c b/usr/src/lib/libproc/common/Pidle.c index bf05e6a2e9..4e23112152 100644 --- a/usr/src/lib/libproc/common/Pidle.c +++ b/usr/src/lib/libproc/common/Pidle.c @@ -113,6 +113,7 @@ Pgrab_file(const char *fname, int *perr) struct ps_prochandle *P = NULL; GElf_Ehdr ehdr; Elf *elf = NULL; + size_t phnum; file_info_t *fp = NULL; int fd; int i; @@ -195,12 +196,17 @@ Pgrab_file(const char *fname, int *perr) goto err; } - dprintf("Pgrab_file: ehdr.e_phnum = %d\n", ehdr.e_phnum); + if (elf_getphnum(elf, &phnum) == 0) { + *perr = G_STRANGE; + goto err; + } + + dprintf("Pgrab_file: program header count = %lu\n", (ulong_t)phnum); /* * Sift through the program headers making the relevant maps. */ - for (i = 0; i < ehdr.e_phnum; i++) { + for (i = 0; i < phnum; i++) { GElf_Phdr phdr, *php; if ((php = gelf_getphdr(elf, i, &phdr)) == NULL) { |