Patch 2/9: finish realm should free keys with 0 length too
Alexandr Nedvedicky
alexandr.nedvedicky at oracle.com
Mon Feb 19 19:47:08 EST 2018
Hello,
I'm upgrading kerberos bundled with Solaris to krb5-1.16. Solaris currently
ships krb5-1.15.1. I've noticed there are some memory leaks, while running test
suite, which comes with krb-1.16 (e.g. running 'make check'). I don't think
those memory leaks are critical, though as kerberos newbie I can't be sure, so
I think I'm better to share my findings. All memory leaks were found using
'libumem', which can be found on Solaris (or its OSS sibbling illumos).
All patches are against krb5-1.16 release.
Patch below is kind of guess as I suspect the change might be rather
fixing symptoms than true root cause. I'm still getting familiar with
kerberos soruce code. The leaked memory got always allocated by
stack as follows:
ADDR BUFADDR TIMESTAMP THREAD
CACHE LASTLOG CONTENTS
83ff108 83faa60 cea2131e2b05 1
83e2a08 83d31f8 0
libumem.so.1`umem_cache_alloc_debug+0x16e
libumem.so.1`umem_cache_alloc+0x21f
libumem.so.1`umem_alloc+0x85
libumem.so.1`malloc+0x2a
libumem.so.1`calloc+0x68
libkdb5.so.9.0`k5calloc+0x61
libkdb5.so.9.0`k5alloc+0x2d
libkdb5.so.9.0`k5memdup+0x27
libkdb5.so.9.0`krb5_db_fetch_mkey+0x2dd
init_realm+0x9a7
initialize_realms+0xe8e
main+0x1fd
_start+0x72
after walking through KDC source code I could spot only one possible culprit
found in patch below. After applying the patch the leak is gone.
regards
sasha
--------8<---------------8<---------------8<------------------8<--------
diff --git a/src/kdc/main.c b/src/kdc/main.c
index 6a78ec596..2f5daed8b 100644
--- a/src/kdc/main.c
+++ b/src/kdc/main.c
@@ -161,7 +161,7 @@ finish_realm(kdc_realm_t *rdp)
if (rdp->realm_context) {
if (rdp->realm_mprinc)
krb5_free_principal(rdp->realm_context, rdp->realm_mprinc);
- if (rdp->realm_mkey.length && rdp->realm_mkey.contents) {
+ if (rdp->realm_mkey.contents) {
/* XXX shouldn't memset be zap for safety? */
memset(rdp->realm_mkey.contents, 0, rdp->realm_mkey.length);
free(rdp->realm_mkey.contents);
More information about the krbdev
mailing list