]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
Fix several mem leaks in ldb_index ldb_search ldb_tdb
authorAndrej Gessel <Andrej.Gessel@janztec.com>
Thu, 14 Jun 2018 10:19:29 +0000 (12:19 +0200)
committerKarolin Seeger <kseeger@samba.org>
Tue, 26 Jun 2018 07:19:17 +0000 (09:19 +0200)
BUG: https://bugzilla.samba.org/show_bug.cgi?id=13475

Signed-off-by: Andrej Gessel <Andrej.Gessel@janztec.com>
Reviewed-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Autobuild-User(master): Andrew Bartlett <abartlet@samba.org>
Autobuild-Date(master): Fri Jun 15 23:07:25 CEST 2018 on sn-devel-144

(cherry picked from commit 3ca1c09f686fbfa9257cd95710dba4a98c3eeb8f)

lib/ldb/ldb_tdb/ldb_index.c
lib/ldb/ldb_tdb/ldb_search.c
lib/ldb/ldb_tdb/ldb_tdb.c

index 340e5c725507fa61c4d49e7b270880916419c89b..40baeea5c2bc4b22375c6bbb7e98f4c040d15ef9 100644 (file)
@@ -403,6 +403,7 @@ normal_index:
                                      "expected %d for %s",
                                      version, LTDB_INDEXING_VERSION,
                                      ldb_dn_get_linearized(dn));
+                       talloc_free(msg);
                        return LDB_ERR_OPERATIONS_ERROR;
                }
 
@@ -420,14 +421,17 @@ normal_index:
                                      "expected %d for %s",
                                      version, LTDB_GUID_INDEXING_VERSION,
                                      ldb_dn_get_linearized(dn));
+                       talloc_free(msg);
                        return LDB_ERR_OPERATIONS_ERROR;
                }
 
                if (el->num_values != 1) {
+                       talloc_free(msg);
                        return LDB_ERR_OPERATIONS_ERROR;
                }
 
                if ((el->values[0].length % LTDB_GUID_SIZE) != 0) {
+                       talloc_free(msg);
                        return LDB_ERR_OPERATIONS_ERROR;
                }
 
index fdae4cba62b98518d5e67b7dc395976479177870..02890862cf72513e3e4703a55f2b574bfafb34e8 100644 (file)
@@ -408,7 +408,7 @@ int ltdb_filter_attrs(TALLOC_CTX *mem_ctx,
        /* Shortcuts for the simple cases */
        } else if (add_dn && i == 1) {
                if (msg_add_distinguished_name(msg2) != 0) {
-                       return -1;
+                       goto failed;
                }
                *filtered_msg = msg2;
                return 0;
@@ -474,7 +474,7 @@ int ltdb_filter_attrs(TALLOC_CTX *mem_ctx,
 
        if (add_dn) {
                if (msg_add_distinguished_name(msg2) != 0) {
-                       return -1;
+                       goto failed;
                }
        }
 
@@ -483,7 +483,7 @@ int ltdb_filter_attrs(TALLOC_CTX *mem_ctx,
                                                struct ldb_message_element,
                                                msg2->num_elements);
                if (msg2->elements == NULL) {
-                       return -1;
+                       goto failed;
                }
        } else {
                talloc_free(msg2->elements);
@@ -494,6 +494,7 @@ int ltdb_filter_attrs(TALLOC_CTX *mem_ctx,
 
        return 0;
 failed:
+       TALLOC_FREE(msg2);
        return -1;
 }
 
index f2d179c7db6d74c6d85cbbdb34439426ff8c47b3..701427609e9da7a9e1778fb643328dbd2db82209 100644 (file)
@@ -434,6 +434,7 @@ int ltdb_store(struct ldb_module *module, const struct ldb_message *msg, int flg
        }
 
        if (ltdb->read_only) {
+               talloc_free(tdb_key_ctx);
                return LDB_ERR_UNWILLING_TO_PERFORM;
        }
 
@@ -657,6 +658,7 @@ int ltdb_delete_noindex(struct ldb_module *module,
        }
 
        if (ltdb->read_only) {
+               talloc_free(tdb_key_ctx);
                return LDB_ERR_UNWILLING_TO_PERFORM;
        }