[1319] in Kerberos-V5-bugs

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

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;
  }

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