summaryrefslogtreecommitdiff
path: root/usr/src/lib/libproc
diff options
context:
space:
mode:
authorjj204856 <none@none>2006-12-22 08:31:43 -0800
committerjj204856 <none@none>2006-12-22 08:31:43 -0800
commit5fccf8b44261688c0ead8d8d22fc89b66f9bfbf4 (patch)
tree338bf1b33173114de6bf1f3ac0e7b32395492948 /usr/src/lib/libproc
parent7854eba3a0b1b0f6d738d64d1fbf4e6e68f82c3c (diff)
downloadillumos-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.c16
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) {