Mercurial > illumos > illumos-gate
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); }