]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
4209. [bug] Address resource leaks in dlz modules. [RT #40654]
authorMark Andrews <marka@isc.org>
Thu, 17 Sep 2015 03:19:35 +0000 (13:19 +1000)
committerMark Andrews <marka@isc.org>
Thu, 17 Sep 2015 03:19:35 +0000 (13:19 +1000)
CHANGES
contrib/dlz/modules/filesystem/dlz_filesystem_dynamic.c
contrib/dlz/modules/perl/dlz_perl_driver.c

diff --git a/CHANGES b/CHANGES
index b63f9a348e8de9c48bb6b84316d10574a46fbbad..18eb1ae34b80b60cce01aebfb7624476ae0ea4d6 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,5 @@
+4209.  [bug]           Address resource leaks in dlz modules. [RT #40654]
+
 4208.  [bug]           Address null pointer dereferences on out of memory.
                        [RT #40764]
 
index d199d3979a5cc62327973021205777f04d8a490b..35bed58923cfddb1d9f515ea51af8b974d63332a 100644 (file)
@@ -617,7 +617,8 @@ dlz_allnodes(const char *zone, void *dbdata, dns_sdlzallnodes_t *allnodes) {
        DLZ_LIST_INIT(*dir_list);
 
        if (create_path(zone, NULL, NULL, cd, &basepath) != ISC_R_SUCCESS) {
-               return (ISC_R_NOTFOUND);
+               result = ISC_R_NOTFOUND;
+               goto complete_allnds;
        }
 
        /* remove path separator at end of path so stat works properly */
@@ -852,14 +853,16 @@ dlz_create(const char *dlzname, unsigned int argc, char *argv[],
                cd->log(ISC_LOG_ERROR,
                        "Filesystem driver requires "
                        "6 command line args.");
-               return (ISC_R_FAILURE);
+               result = ISC_R_FAILURE;
+               goto free_cd;
        }
 
        if (strlen(argv[5]) > 1) {
                cd->log(ISC_LOG_ERROR,
                        "Filesystem driver can only "
                        "accept a single character for separator.");
-               return (ISC_R_FAILURE);
+               result = ISC_R_FAILURE;
+               goto free_cd;
        }
 
        /* verify base dir ends with '/' or '\' */
@@ -869,7 +872,8 @@ dlz_create(const char *dlzname, unsigned int argc, char *argv[],
                        "Base dir parameter for filesystem driver "
                        "should end with %s",
                        "either '/' or '\\' ");
-               return (ISC_R_FAILURE);
+               result = ISC_R_FAILURE;
+               goto free_cd;
        }
 
        /* determine and save path separator for later */
@@ -923,6 +927,7 @@ dlz_create(const char *dlzname, unsigned int argc, char *argv[],
                        "filesystem_dynamic: Filesystem driver unable to "
                        "allocate memory for config data.");
 
+ free_cd:
        /* if we allocated a config data object clean it up */
        if (cd != NULL)
                dlz_destroy(cd);
index 095b99c01aa74eb7077625a2aa07653f9b03874e..ef84f416304e8067911fc3b547ac5f3b1ddb9d9c 100644 (file)
@@ -566,6 +566,7 @@ dlz_create(const char *dlzname, unsigned int argc, char *argv[],
                cd->log(ISC_LOG_ERROR,
                        "DLZ Perl '%s': Missing script argument.",
                        dlzname);
+               free(cd);
                return (ISC_R_FAILURE);
        }
 
@@ -573,6 +574,7 @@ dlz_create(const char *dlzname, unsigned int argc, char *argv[],
                cd->log(ISC_LOG_ERROR,
                        "DLZ Perl '%s': Missing class name argument.",
                        dlzname);
+               free(cd);
                return (ISC_R_FAILURE);
        }
        perl_class_name = argv[2];