[338] in Kerberos-V5-bugs

home help back first fref pref prev next nref lref last post

minor memory leak in crep2kcrep.c (pre-beta3)

daemon@ATHENA.MIT.EDU (Jim Miller)
Wed Sep 15 18:02:02 1993

From: jim@bilbo.suite.com (Jim Miller)
Date: Wed, 15 Sep 93 16:49:36 -0500
To: krb5-bugs@MIT.EDU
Cc: kerberos@MIT.EDU
Reply-To: Jim_Miller@suite.com


The following code is from crep2kcrep.c, Kerberos 5 version pre-beta3.   
However, the same memory leak is present in crep2kcrep.c, Kerberos 5 version  
beta2.


krb5_cred_enc_part *
KRB5_EncKrbCredPart2krb5_cred_enc_part(val, error)
const register struct type_KRB5_EncKrbCredPart *val;
register int *error;
{
    register krb5_cred_enc_part *retval;
    register int i;
    register const struct element_KRB5_13 *rv;

    retval = (krb5_cred_enc_part *)xmalloc(sizeof(*retval));
    if (!retval) {
	*error = ENOMEM;
	return(0);
    }
    xbzero((char *)retval, sizeof(*retval));

    /* Count ticket_info */
    for (i = 0, rv = val->ticket__info; rv; i++, rv = rv->next);

    /* plus one for null terminator */
    retval->ticket_info = (krb5_cred_info **) 

      xcalloc(i + 1, sizeof(*retval->ticket_info));
    if (!retval->ticket_info) {
    nomem:
	*error = ENOMEM;
	return(0);              <- *** returning without freeing retval ***
    }

I realize it's not a life threatening memory leak, but I thought you'd like to  
know about it anyways.

Suggested fix:

    if (!retval->ticket_info) {
-    nomem:				<- remove the label
	*error = ENOMEM;
+	xfree(retval);			<- free retval
	return(0);
    }
	.
	.
	.
	if (!retval->ticket_info[i]) {
-	    krb5_free_cred_enc_part(retval);  <- remove this line
+	    *error = ENOMEM;		<- set error code
!	    goto errout;		<- goto errout instead of nomem
	}



Jim_Miller@suite.com


home help back first fref pref prev next nref lref last post