Mercurial > illumos > illumos-gate
changeset 3321:a69c48e50275
6486657 memory allocated in fake_elf() not freed
author | jj204856 |
---|---|
date | Fri, 22 Dec 2006 08:31:43 -0800 |
parents | 87a63530d08c |
children | 1d861e55bbc9 |
files | usr/src/lib/libproc/common/Psymtab.c |
diffstat | 1 files changed, 6 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/lib/libproc/common/Psymtab.c Fri Dec 22 06:18:54 2006 -0800 +++ b/usr/src/lib/libproc/common/Psymtab.c Fri Dec 22 08:31:43 2006 -0800 @@ -1412,10 +1412,8 @@ 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 @@ 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 @@ 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 @@ if (dcount + 4 != DI_NENT) { dprintf("text section missing required dynamic " "entries\n"); - return (NULL); + goto bad64; } if (ehdr.e_type == ET_DYN) {