Memory Leak problems with krb5_get_init_creds_password?

brian.joh@comcast.net brian.joh at comcast.net
Thu Aug 18 16:22:29 EDT 2005


I looked at the Heimdal source, and apparently it has this
issue too.  Didn't run any tests to verify this though.

I looked at BIND, and indeed res_ndestroy() is defined in
the resolv.h header file, but not exported.  However, while
perusing the source, I noticed if res_ninit() is called
more than once on the same res_state structure it will call
res_ndestroy() to free up the old memory.  Basically,
res_ninit() sets the RES_INIT bit.  Before doing anything,
it also checks that bit, and, if set, calls res_ndestroy().
Res_ndestroy()then unsets that bit.

Knowing this, minimizing the memory leak should be really
simple.  The res_state structure needs to be moved inside
the krb5_context.  The call to res_ninit() doesn't need to
move, but it needs to use the res_state stored in the
krb5_context.  (Basically, it needs to use the same
res_state structure each time.)

Note a memory leak should still exist if you constantly
create krb5_contexts as Chet's program does.  However,
Chet's program is inefficient, and you should really never
need more than one krb5_context per thread/program.



More information about the Kerberos mailing list