[1319] in Kerberos-V5-bugs
Memory leak in krb5_rd_req
daemon@ATHENA.MIT.EDU (epeisach@MIT.EDU)
Fri Mar 31 00:25:22 1995
From: epeisach@MIT.EDU
Date: Fri, 31 Mar 1995 00:25:08 -0500
To: krb5-bugs@MIT.EDU
If no keytab is specified in the called to krb5_rd_req, then one is
created. You will notice that the code to close the new_keytab is
broken. == vs !=.
This was found in tracking down another problem in kdc_hammer. (which is
being worked no the verify the fix to the kdc -- in the house that Jack
built).
(found using dmalloc when it indicated that references to keytab
routines were not freed - next set of problems will be found using purify).
Ezra
Index: rd_req.c
===================================================================
RCS file: /mit/krb5/.cvsroot/src/lib/krb5/krb/rd_req.c,v
retrieving revision 5.24
diff -c -1 -0 -r5.24 rd_req.c
*** rd_req.c 1995/03/27 14:49:50 5.24
--- rd_req.c 1995/03/31 05:11:17
***************
*** 88,108 ****
/* Get a keytab if necessary. */
if (keytab == NULL) {
if (retval = krb5_kt_default(context, &new_keytab))
goto cleanup_auth_context;
keytab = new_keytab;
}
retval = krb5_rd_req_decoded(context, auth_context, request, server,
keytab, ap_req_options, ticket);
! if (new_keytab == NULL)
(void) krb5_kt_close(context, new_keytab);
cleanup_auth_context:
if (new_auth_context && retval)
krb5_auth_con_free(context, new_auth_context);
cleanup_request:
krb5_free_ap_req(context, request);
return retval;
}
--- 88,108 ----
/* Get a keytab if necessary. */
if (keytab == NULL) {
if (retval = krb5_kt_default(context, &new_keytab))
goto cleanup_auth_context;
keytab = new_keytab;
}
retval = krb5_rd_req_decoded(context, auth_context, request, server,
keytab, ap_req_options, ticket);
! if (new_keytab != NULL)
(void) krb5_kt_close(context, new_keytab);
cleanup_auth_context:
if (new_auth_context && retval)
krb5_auth_con_free(context, new_auth_context);
cleanup_request:
krb5_free_ap_req(context, request);
return retval;
}