summaryrefslogtreecommitdiff
path: root/usr/src/lib/libproc/common/Pidle.c
diff options
context:
space:
mode:
authorahl <none@none>2005-11-17 11:42:26 -0800
committerahl <none@none>2005-11-17 11:42:26 -0800
commit30da143285931291f495cc20b5a1b8869f0618a6 (patch)
tree5a2c0cc9c0956756f9ba0abf8a2a7b205671626f /usr/src/lib/libproc/common/Pidle.c
parent186507a7cf6e4b4155e9ef89631777a96633ac0e (diff)
downloadillumos-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.c10
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) {