diff options
author | jj204856 <none@none> | 2006-12-22 08:31:43 -0800 |
---|---|---|
committer | jj204856 <none@none> | 2006-12-22 08:31:43 -0800 |
commit | 5fccf8b44261688c0ead8d8d22fc89b66f9bfbf4 (patch) | |
tree | 338bf1b33173114de6bf1f3ac0e7b32395492948 /usr/src/lib/libproc | |
parent | 7854eba3a0b1b0f6d738d64d1fbf4e6e68f82c3c (diff) | |
download | illumos-joyent-5fccf8b44261688c0ead8d8d22fc89b66f9bfbf4.tar.gz |
6486657 memory allocated in fake_elf() not freed
Diffstat (limited to 'usr/src/lib/libproc')
-rw-r--r-- | usr/src/lib/libproc/common/Psymtab.c | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/usr/src/lib/libproc/common/Psymtab.c b/usr/src/lib/libproc/common/Psymtab.c index adf05d130a..035102fb57 100644 --- a/usr/src/lib/libproc/common/Psymtab.c +++ b/usr/src/lib/libproc/common/Psymtab.c @@ -1412,10 +1412,8 @@ fake_elf(struct ps_prochandle *P, file_info_t *fptr) return (NULL); if (Pread(P, dp, phdr.p_filesz, phdr.p_vaddr) != - phdr.p_filesz) { - free(dp); - return (NULL); - } + phdr.p_filesz) + goto bad32; /* * Allow librtld_db the opportunity to "fix" the program @@ -1483,7 +1481,7 @@ fake_elf(struct ps_prochandle *P, file_info_t *fptr) if (dcount + 4 != DI_NENT) { dprintf("text section missing required dynamic " "entries\n"); - return (NULL); + goto bad32; } if (ehdr.e_type == ET_DYN) { @@ -1755,10 +1753,8 @@ bad32: return (NULL); if (Pread(P, dp, phdr.p_filesz, phdr.p_vaddr) != - phdr.p_filesz) { - free(dp); - return (NULL); - } + phdr.p_filesz) + goto bad64; for (i = 0; i < phdr.p_filesz / sizeof (Elf64_Dyn); i++) { switch (dp[i].d_tag) { @@ -1818,7 +1814,7 @@ bad32: if (dcount + 4 != DI_NENT) { dprintf("text section missing required dynamic " "entries\n"); - return (NULL); + goto bad64; } if (ehdr.e_type == ET_DYN) { |