summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGreg Hudson <ghudson@mit.edu>2009-02-10 17:17:39 +0000
committerGreg Hudson <ghudson@mit.edu>2009-02-10 17:17:39 +0000
commit07f7b4b99d29da5f17d7a54340105586af855a04 (patch)
tree1bd1b31e4d10bc7e9b1ae02b1189de3b9f973c9e /src
parent83731efbbbb03a26a3f2740c79afadca56974ead (diff)
downloadkrb5-07f7b4b99d29da5f17d7a54340105586af855a04.tar.gz
krb5-07f7b4b99d29da5f17d7a54340105586af855a04.tar.xz
krb5-07f7b4b99d29da5f17d7a54340105586af855a04.zip
Fix a memory leak (unlikely to happen in practice) in krb5_mcc_store;
use a cleanup handler for robustness. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@21950 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src')
-rw-r--r--src/lib/krb5/ccache/cc_memory.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/lib/krb5/ccache/cc_memory.c b/src/lib/krb5/ccache/cc_memory.c
index 2cfd60a10..61ab5451b 100644
--- a/src/lib/krb5/ccache/cc_memory.c
+++ b/src/lib/krb5/ccache/cc_memory.c
@@ -643,18 +643,19 @@ krb5_mcc_store(krb5_context ctx, krb5_ccache id, krb5_creds *creds)
if (new_node == NULL)
return ENOMEM;
err = krb5_copy_creds(ctx, creds, &new_node->creds);
- if (err) {
- free(new_node);
- return err;
- }
+ if (err)
+ goto cleanup;
err = k5_cc_mutex_lock(ctx, &mptr->lock);
if (err)
- return err;
+ goto cleanup;
new_node->next = mptr->link;
mptr->link = new_node;
update_mcc_change_time(mptr);
k5_cc_mutex_unlock(ctx, &mptr->lock);
return 0;
+cleanup:
+ free(new_node);
+ return err;
}
static krb5_error_code KRB5_CALLCONV