From: Mark Andrews Date: Thu, 2 Aug 2018 05:34:31 +0000 (+1000) Subject: fix lock order reversal X-Git-Tag: v9.13.3~53^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2bb4392bb3de0b10f9e31f14e4f871f6863cfc2e;p=thirdparty%2Fbind9.git fix lock order reversal --- diff --git a/lib/isc/pk11.c b/lib/isc/pk11.c index 57bf2a234eb..cfc5e52074e 100644 --- a/lib/isc/pk11.c +++ b/lib/isc/pk11.c @@ -182,21 +182,20 @@ pk11_mem_put(void *ptr, size_t size) { isc_result_t pk11_initialize(isc_mem_t *mctx, const char *engine) { - isc_result_t result; + isc_result_t result = ISC_R_SUCCESS; CK_RV rv; RUNTIME_CHECK(isc_once_do(&once, initialize) == ISC_R_SUCCESS); + LOCK(&sessionlock); LOCK(&alloclock); if ((mctx != NULL) && (pk11_mctx == NULL) && (allocsize == 0)) isc_mem_attach(mctx, &pk11_mctx); + UNLOCK(&alloclock); if (initialized) { - UNLOCK(&alloclock); - return (ISC_R_SUCCESS); + goto unlock; } else { - LOCK(&sessionlock); initialized = true; - UNLOCK(&alloclock); } ISC_LIST_INIT(tokens); @@ -220,7 +219,6 @@ pk11_initialize(isc_mem_t *mctx, const char *engine) { } scan_slots(); - result = ISC_R_SUCCESS; unlock: UNLOCK(&sessionlock); return (result);