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) {