diff options
author | ahl <none@none> | 2005-11-17 11:42:26 -0800 |
---|---|---|
committer | ahl <none@none> | 2005-11-17 11:42:26 -0800 |
commit | 30da143285931291f495cc20b5a1b8869f0618a6 (patch) | |
tree | 5a2c0cc9c0956756f9ba0abf8a2a7b205671626f /usr/src/lib/libproc/common/Pidle.c | |
parent | 186507a7cf6e4b4155e9ef89631777a96633ac0e (diff) | |
download | illumos-gate-30da143285931291f495cc20b5a1b8869f0618a6.tar.gz |
PSARC 2005/689 ELF Extended Program Headers
6317969 elfheader limited to 65535 segments
6317980 coredump elfheader doesn't reflect the correct number of dumped segments
6343698 p-tools affected by 6317980 : coredump elfheader incorrectly states number of dumped segments
6350070 stub for shmgetid() returns the wrong default value
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) { |