3954. [bug] Unchecked mutex init in dlz_dlopen_driver.c [RT #37112]

(cherry picked from commit 6b6d6509f6)
This commit is contained in:
Mark Andrews 2014-09-27 12:30:00 +10:00
parent 0d807e99b1
commit b4bac6bef3
2 changed files with 12 additions and 6 deletions

View file

@ -1,3 +1,5 @@
3954. [bug] Unchecked mutex init in dlz_dlopen_driver.c [RT #37112]
3953. [bug] Don't escape semi-colon in TXT fields. [RT #37159]
3952. [bug] dns_name_fullcompare failed to set *nlabelsp when the

View file

@ -252,7 +252,9 @@ dlopen_dlz_create(const char *dlzname, unsigned int argc, char *argv[],
triedload = ISC_TRUE;
/* Initialize the lock */
isc_mutex_init(&cd->lock);
result = isc_mutex_init(&cd->lock);
if (result != ISC_R_SUCCESS)
goto failed;
/* Open the library */
cd->dl_handle = LoadLibraryA(cd->dl_path);
@ -263,7 +265,7 @@ dlopen_dlz_create(const char *dlzname, unsigned int argc, char *argv[],
"dlz_dlopen failed to open library '%s' - %u",
cd->dl_path, error);
result = ISC_R_FAILURE;
goto failed;
goto cleanup_lock;
}
/* Find the symbols */
@ -282,7 +284,7 @@ dlopen_dlz_create(const char *dlzname, unsigned int argc, char *argv[],
{
/* We're missing a required symbol */
result = ISC_R_FAILURE;
goto failed;
goto cleanup_lock;
}
cd->dlz_allowzonexfr = (dlz_dlopen_allowzonexfr_t *)
@ -316,7 +318,7 @@ dlopen_dlz_create(const char *dlzname, unsigned int argc, char *argv[],
"should be %d in '%s'",
cd->version, DLZ_DLOPEN_VERSION, cd->dl_path);
result = ISC_R_FAILURE;
goto failed;
goto cleanup_lock;
}
/*
@ -336,12 +338,14 @@ dlopen_dlz_create(const char *dlzname, unsigned int argc, char *argv[],
NULL);
MAYBE_UNLOCK(cd);
if (result != ISC_R_SUCCESS)
goto failed;
goto cleanup_lock;
*dbdata = cd;
return (ISC_R_SUCCESS);
cleanup_lock:
DESTROYLOCK(&cd->lock);
failed:
dlopen_log(ISC_LOG_ERROR, "dlz_dlopen of '%s' failed", dlzname);
if (cd->dl_path)
@ -382,7 +386,7 @@ dlopen_dlz_destroy(void *driverarg, void *dbdata) {
if (cd->dl_handle)
FreeLibrary(cd->dl_handle);
(void) isc_mutex_destroy(&cd->lock);
DESTROYLOCK(&cd->lock);
mctx = cd->mctx;
isc_mem_put(mctx, cd, sizeof(*cd));