From becb0b03aed50f71a6a20ac88009b63e92115688 Mon Sep 17 00:00:00 2001 From: YASUOKA Masahiko Date: Wed, 26 Dec 2018 11:32:58 -0600 Subject: [PATCH] Deadlock in lib/krb5/mcache.c #432 --- lib/krb5/mcache.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/krb5/mcache.c b/lib/krb5/mcache.c index 474cb3a2b..e45bc1b0a 100644 --- a/lib/krb5/mcache.c +++ b/lib/krb5/mcache.c @@ -248,27 +248,28 @@ mcc_destroy(krb5_context context, { krb5_mcache **n, *m = MCACHE(id); + HEIMDAL_MUTEX_lock(&mcc_mutex); HEIMDAL_MUTEX_lock(&(m->mutex)); if (m->refcnt == 0) { HEIMDAL_MUTEX_unlock(&(m->mutex)); + HEIMDAL_MUTEX_unlock(&mcc_mutex); krb5_abortx(context, "mcc_destroy: refcnt already 0"); } if (!MISDEAD(m)) { /* if this is an active mcache, remove it from the linked list, and free all data */ - HEIMDAL_MUTEX_lock(&mcc_mutex); for(n = &mcc_head; n && *n; n = &(*n)->next) { if(m == *n) { *n = m->next; break; } } - HEIMDAL_MUTEX_unlock(&mcc_mutex); mcc_destroy_internal(context, m); } HEIMDAL_MUTEX_unlock(&(m->mutex)); + HEIMDAL_MUTEX_unlock(&mcc_mutex); return 0; }