]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
4493. [bug] Address potential NULL pointer dereferences in
authorMark Andrews <marka@isc.org>
Thu, 23 Jun 2016 02:18:03 +0000 (12:18 +1000)
committerMark Andrews <marka@isc.org>
Thu, 23 Jun 2016 02:18:03 +0000 (12:18 +1000)
                        dnstap code.

CHANGES
lib/dns/dnstap.c

diff --git a/CHANGES b/CHANGES
index d42b2be2a3cdb8d1d00f1841aa923cdeda2e16eb..38ba75929c20beeb3afab591589be437394e007d 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+4493.  [bug]           Address potential NULL pointer dereferences in
+                       dnstap code.
+
 4492.  [func]          Collect statistics for RSSAC02v3 traffic-volume,
                        traffic-sizes and rcode-volume reporting. [RT #41475]
 
index ab32f08e085be63fd1e2781f7f6e6ecd88f69485..072735b3112eb7e02c32d695e94cc9dc65e57483 100644 (file)
@@ -232,10 +232,11 @@ dns_dt_create(isc_mem_t *mctx, dns_dtmode_t mode, const char *path,
                fstrm_writer_options_destroy(&fwopt);
 
        if (result != ISC_R_SUCCESS) {
-               if (env->mctx != NULL)
-                       isc_mem_detach(&env->mctx);
-               if (env != NULL)
+               if (env != NULL) {
+                       if (env->mctx != NULL)
+                               isc_mem_detach(&env->mctx);
                        isc_mem_put(mctx, env, sizeof(dns_dtenv_t));
+               }
        }
 
        return (result);
@@ -314,16 +315,11 @@ dns_dt_attach(dns_dtenv_t *source, dns_dtenv_t **destp) {
 }
 
 static void
-destroy(dns_dtenv_t **envp) {
-       dns_dtenv_t *env;
-
-       REQUIRE(envp != NULL && VALID_DTENV(*envp));
+destroy(dns_dtenv_t *env) {
 
        isc_log_write(dns_lctx, DNS_LOGCATEGORY_DNSTAP,
                      DNS_LOGMODULE_DNSTAP, ISC_LOG_INFO,
                      "closing dnstap");
-       env = *envp;
-
        env->magic = 0;
 
        fstrm_iothr_destroy(&env->iothr);
@@ -338,21 +334,21 @@ destroy(dns_dtenv_t **envp) {
        }
 
        isc_mem_putanddetach(&env->mctx, env, sizeof(*env));
-
-       *envp = NULL;
 }
 
 void
 dns_dt_detach(dns_dtenv_t **envp) {
        unsigned int refs;
        dns_dtenv_t *env = *envp;
-       REQUIRE(VALID_DTENV(env));
 
-       isc_refcount_decrement(&env->refcount, &refs);
-       if (refs == 0)
-               destroy(&env);
+       REQUIRE(envp != NULL && VALID_DTENV(*envp));
 
+       env = *envp;
        *envp = NULL;
+
+       isc_refcount_decrement(&env->refcount, &refs);
+       if (refs == 0)
+               destroy(env);
 }
 
 static isc_result_t