[SCM] Samba Shared Repository - branch master updated
Garming Sam
garming at samba.org
Wed Jul 17 06:18:02 UTC 2019
The branch, master has been updated
via ee2fe56ba0e drepl: memory leak fix
from c4613521723 s3/lib/smbconf: clang: 'Value stored during its initialization is never read'
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit ee2fe56ba0ef6626b634376e8dc2185aa89f8c99
Author: Aaron Haslett <aaronhaslett at catalyst.net.nz>
Date: Tue Nov 27 11:07:44 2018 +1300
drepl: memory leak fix
Fixes a memory leak where schema reference attached to ldb
instance is lost before it can be freed.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=14042
Signed-off-by: Aaron Haslett <aaronhaslett at catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet at samba.org>
Reviewed-by: Garming Sam <garming at catalyst.net.nz>
Autobuild-User(master): Garming Sam <garming at samba.org>
Autobuild-Date(master): Wed Jul 17 06:17:10 UTC 2019 on sn-devel-184
-----------------------------------------------------------------------
Summary of changes:
source4/dsdb/schema/schema_set.c | 30 ++++++++++++++++++++++++------
1 file changed, 24 insertions(+), 6 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source4/dsdb/schema/schema_set.c b/source4/dsdb/schema/schema_set.c
index b316686fd03..943d0ef49f5 100644
--- a/source4/dsdb/schema/schema_set.c
+++ b/source4/dsdb/schema/schema_set.c
@@ -695,6 +695,7 @@ int dsdb_reference_schema(struct ldb_context *ldb, struct dsdb_schema *schema,
enum schema_set_enum write_indices_and_attributes)
{
int ret;
+ void *ptr;
struct dsdb_schema *old_schema;
old_schema = ldb_get_opaque(ldb, "dsdb_schema");
ret = ldb_set_opaque(ldb, "dsdb_schema", schema);
@@ -706,8 +707,13 @@ int dsdb_reference_schema(struct ldb_context *ldb, struct dsdb_schema *schema,
* none, NULL is harmless here */
talloc_unlink(ldb, old_schema);
- if (talloc_reference(ldb, schema) == NULL) {
- return ldb_oom(ldb);
+ /* Reference schema on ldb if it wasn't done already */
+ ret = talloc_is_parent(ldb, schema);
+ if (ret == 0) {
+ ptr = talloc_reference(ldb, schema);
+ if (ptr == NULL) {
+ return ldb_oom(ldb);
+ }
}
/* Make this ldb use local schema preferably */
@@ -741,6 +747,7 @@ int dsdb_set_global_schema(struct ldb_context *ldb)
{
int ret;
void *use_global_schema = (void *)1;
+ void *ptr;
struct dsdb_schema *old_schema = ldb_get_opaque(ldb, "dsdb_schema");
ret = ldb_set_opaque(ldb, "dsdb_use_global_schema", use_global_schema);
@@ -766,9 +773,15 @@ int dsdb_set_global_schema(struct ldb_context *ldb)
/* Don't write indices and attributes, it's expensive */
ret = dsdb_schema_set_indices_and_attributes(ldb, global_schema, SCHEMA_MEMORY_ONLY);
if (ret == LDB_SUCCESS) {
- /* Keep a reference to this schema, just in case the original copy is replaced */
- if (talloc_reference(ldb, global_schema) == NULL) {
- return ldb_oom(ldb);
+ /* If ldb doesn't have a reference to the schema, make one,
+ * just in case the original copy is replaced */
+ ret = talloc_is_parent(ldb, global_schema);
+ if (ret == 0) {
+ ptr = talloc_reference(ldb, global_schema);
+ if (ptr == NULL) {
+ return ldb_oom(ldb);
+ }
+ ret = ldb_set_opaque(ldb, "dsdb_schema", global_schema);
}
}
@@ -794,6 +807,7 @@ struct dsdb_schema *dsdb_get_schema(struct ldb_context *ldb, TALLOC_CTX *referen
dsdb_schema_refresh_fn refresh_fn;
struct ldb_module *loaded_from_module;
bool use_global_schema;
+ int ret;
TALLOC_CTX *tmp_ctx = talloc_new(reference_ctx);
if (tmp_ctx == NULL) {
return NULL;
@@ -843,7 +857,11 @@ struct dsdb_schema *dsdb_get_schema(struct ldb_context *ldb, TALLOC_CTX *referen
/* This removes the extra reference above */
talloc_free(tmp_ctx);
- if (!reference_ctx) {
+
+ /* If ref ctx exists and doesn't already reference schema, then add
+ * a reference. Otherwise, just return schema.*/
+ ret = talloc_is_parent(reference_ctx, schema_out);
+ if ((ret == 1) || (!reference_ctx)) {
return schema_out;
} else {
return talloc_reference(reference_ctx, schema_out);
--
Samba Shared Repository
More information about the samba-cvs
mailing list