changeset 11221:b211d0a04b63

6904179 kcfd dies under the tender mercies of libumem
author Wyllys Ingersoll <wyllys.ingersoll@sun.com>
date Tue, 01 Dec 2009 12:24:43 -0800
parents 41c5df5d6f31
children 5e56af24ae09
files usr/src/lib/libkmf/ber_der/common/io.c
diffstat 1 files changed, 3 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/lib/libkmf/ber_der/common/io.c	Tue Dec 01 11:45:15 2009 -0500
+++ b/usr/src/lib/libkmf/ber_der/common/io.c	Tue Dec 01 12:24:43 2009 -0800
@@ -74,7 +74,6 @@
 	Seqorset	*s;
 	size_t		off;
 	char		*oldbuf;
-	boolean_t	freeold = B_FALSE;
 
 	have_bytes = ber->ber_end - ber->ber_buf;
 	have = have_bytes / EXBUFSIZ;
@@ -94,19 +93,18 @@
 			/* transition to malloc'd buffer */
 			if ((ber->ber_buf = (char *)malloc(
 			    (size_t)total)) == NULL) {
-				free(oldbuf);
 				return (-1);
 			}
 			ber->ber_flags &= ~KMFBER_FLAG_NO_FREE_BUFFER;
+
 			/* copy existing data into new malloc'd buffer */
 			(void) memmove(ber->ber_buf, oldbuf, have_bytes);
-			freeold = B_TRUE;
 		} else {
 			if ((ber->ber_buf = (char *)realloc(
-			    ber->ber_buf, (size_t)total)) == NULL) {
+			    oldbuf, (size_t)total)) == NULL) {
+				free(oldbuf);
 				return (-1);
 			}
-			freeold = B_FALSE; /* it was just realloced */
 		}
 	}
 
@@ -128,8 +126,6 @@
 			s->sos_ptr = ber->ber_buf + off;
 		}
 	}
-	if (freeold && oldbuf != NULL)
-		free(oldbuf);
 
 	return (0);
 }