From 5fccf8b44261688c0ead8d8d22fc89b66f9bfbf4 Mon Sep 17 00:00:00 2001 From: jj204856 Date: Fri, 22 Dec 2006 08:31:43 -0800 Subject: 6486657 memory allocated in fake_elf() not freed --- usr/src/lib/libproc/common/Psymtab.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) (limited to 'usr/src/lib/libproc') 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) { -- cgit v1.2.3