From 8e161b6860660cb9fa5643840c33300740ad9c8a Mon Sep 17 00:00:00 2001 From: Robin Hack Date: Tue, 26 Apr 2016 13:02:01 +0200 Subject: [PATCH 1/3] talloc/testsuite: Fix CID 1291641 - Logically dead code Add check for snprintf return code. Signed-off-by: Robin Hack Reviewed-by: Jeremy Allison Reviewed-by: Andreas Schneider (cherry picked from commit b9ffb9322b987409693e4faa277b5e3f46ad8b22) --- lib/talloc/testsuite.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/talloc/testsuite.c b/lib/talloc/testsuite.c index 34410b8..5eab839 100644 --- a/lib/talloc/testsuite.c +++ b/lib/talloc/testsuite.c @@ -1795,11 +1795,11 @@ static bool test_pthread_talloc_passing(void) * They will use their own toplevel contexts. */ for (i = 0; i < NUM_THREADS; i++) { - (void)snprintf(str_array[i], - 20, - "thread:%d", - i); - if (str_array[i] == NULL) { + ret = snprintf(str_array[i], + 20, + "thread:%d", + i); + if (ret < 0) { printf("snprintf %d failed\n", i); return false; } -- 1.9.1 From 49137777b889866470a7f1bbc9e700236926ff92 Mon Sep 17 00:00:00 2001 From: Saji VR Date: Wed, 4 May 2016 15:14:55 -0700 Subject: [PATCH 2/3] lib:talloc. Fix memory leak when destructors reparent children. If a destructor reparents a child, we shouldn't exit the loop freeing children as there may be others to process. https://bugzilla.samba.org/show_bug.cgi?id=11901 Signed-off-by: Saji VR Reviewed-by: Jeremy Allison Reviewed-by: Richard Sharpe Reviewed-by: Ira Cooper Autobuild-User(master): Jeremy Allison Autobuild-Date(master): Thu May 5 08:33:53 CEST 2016 on sn-devel-144 (cherry picked from commit d4d14b15b6734e99f8527136ec007a97024ac348) --- lib/talloc/talloc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/talloc/talloc.c b/lib/talloc/talloc.c index 90b9d96..48d2033 100644 --- a/lib/talloc/talloc.c +++ b/lib/talloc/talloc.c @@ -1528,7 +1528,7 @@ static inline void _talloc_free_children_internal(struct talloc_chunk *tc, * Destructor already reparented this child. * No further reparenting needed. */ - return; + continue; } if (new_parent == null_context) { struct talloc_chunk *p = talloc_parent_chunk(ptr); -- 1.9.1 From fa92cbd56b11b394cffb87aad64dce10a5cc4f99 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 5 May 2016 10:18:57 +0200 Subject: [PATCH 3/3] talloc: version 2.1.7 * Fix memory leak when destructors reparent children. (bug #11901) Signed-off-by: Stefan Metzmacher Reviewed-by: Jeremy Allison Autobuild-User(master): Jeremy Allison Autobuild-Date(master): Thu May 5 22:33:04 CEST 2016 on sn-devel-144 (cherry picked from commit 83b64ae64b315ccc37b9fce66f19ab0d342ad3ba) --- lib/talloc/ABI/pytalloc-util-2.1.7.sigs | 13 ++++++ lib/talloc/ABI/pytalloc-util.py3-2.1.7.sigs | 12 ++++++ lib/talloc/ABI/talloc-2.1.7.sigs | 65 +++++++++++++++++++++++++++++ lib/talloc/wscript | 2 +- 4 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 lib/talloc/ABI/pytalloc-util-2.1.7.sigs create mode 100644 lib/talloc/ABI/pytalloc-util.py3-2.1.7.sigs create mode 100644 lib/talloc/ABI/talloc-2.1.7.sigs diff --git a/lib/talloc/ABI/pytalloc-util-2.1.7.sigs b/lib/talloc/ABI/pytalloc-util-2.1.7.sigs new file mode 100644 index 0000000..666fec0 --- /dev/null +++ b/lib/talloc/ABI/pytalloc-util-2.1.7.sigs @@ -0,0 +1,13 @@ +_pytalloc_get_mem_ctx: TALLOC_CTX *(PyObject *) +_pytalloc_get_ptr: void *(PyObject *) +_pytalloc_get_type: void *(PyObject *, const char *) +pytalloc_BaseObject_PyType_Ready: int (PyTypeObject *) +pytalloc_BaseObject_check: int (PyObject *) +pytalloc_BaseObject_size: size_t (void) +pytalloc_CObject_FromTallocPtr: PyObject *(void *) +pytalloc_Check: int (PyObject *) +pytalloc_GetBaseObjectType: PyTypeObject *(void) +pytalloc_GetObjectType: PyTypeObject *(void) +pytalloc_reference_ex: PyObject *(PyTypeObject *, TALLOC_CTX *, void *) +pytalloc_steal: PyObject *(PyTypeObject *, void *) +pytalloc_steal_ex: PyObject *(PyTypeObject *, TALLOC_CTX *, void *) diff --git a/lib/talloc/ABI/pytalloc-util.py3-2.1.7.sigs b/lib/talloc/ABI/pytalloc-util.py3-2.1.7.sigs new file mode 100644 index 0000000..4410f11 --- /dev/null +++ b/lib/talloc/ABI/pytalloc-util.py3-2.1.7.sigs @@ -0,0 +1,12 @@ +_pytalloc_get_mem_ctx: TALLOC_CTX *(PyObject *) +_pytalloc_get_ptr: void *(PyObject *) +_pytalloc_get_type: void *(PyObject *, const char *) +pytalloc_BaseObject_PyType_Ready: int (PyTypeObject *) +pytalloc_BaseObject_check: int (PyObject *) +pytalloc_BaseObject_size: size_t (void) +pytalloc_Check: int (PyObject *) +pytalloc_GetBaseObjectType: PyTypeObject *(void) +pytalloc_GetObjectType: PyTypeObject *(void) +pytalloc_reference_ex: PyObject *(PyTypeObject *, TALLOC_CTX *, void *) +pytalloc_steal: PyObject *(PyTypeObject *, void *) +pytalloc_steal_ex: PyObject *(PyTypeObject *, TALLOC_CTX *, void *) diff --git a/lib/talloc/ABI/talloc-2.1.7.sigs b/lib/talloc/ABI/talloc-2.1.7.sigs new file mode 100644 index 0000000..9969ce3 --- /dev/null +++ b/lib/talloc/ABI/talloc-2.1.7.sigs @@ -0,0 +1,65 @@ +_talloc: void *(const void *, size_t) +_talloc_array: void *(const void *, size_t, unsigned int, const char *) +_talloc_free: int (void *, const char *) +_talloc_get_type_abort: void *(const void *, const char *, const char *) +_talloc_memdup: void *(const void *, const void *, size_t, const char *) +_talloc_move: void *(const void *, const void *) +_talloc_pooled_object: void *(const void *, size_t, const char *, unsigned int, size_t) +_talloc_realloc: void *(const void *, void *, size_t, const char *) +_talloc_realloc_array: void *(const void *, void *, size_t, unsigned int, const char *) +_talloc_reference_loc: void *(const void *, const void *, const char *) +_talloc_set_destructor: void (const void *, int (*)(void *)) +_talloc_steal_loc: void *(const void *, const void *, const char *) +_talloc_zero: void *(const void *, size_t, const char *) +_talloc_zero_array: void *(const void *, size_t, unsigned int, const char *) +talloc_asprintf: char *(const void *, const char *, ...) +talloc_asprintf_append: char *(char *, const char *, ...) +talloc_asprintf_append_buffer: char *(char *, const char *, ...) +talloc_autofree_context: void *(void) +talloc_check_name: void *(const void *, const char *) +talloc_disable_null_tracking: void (void) +talloc_enable_leak_report: void (void) +talloc_enable_leak_report_full: void (void) +talloc_enable_null_tracking: void (void) +talloc_enable_null_tracking_no_autofree: void (void) +talloc_find_parent_byname: void *(const void *, const char *) +talloc_free_children: void (void *) +talloc_get_name: const char *(const void *) +talloc_get_size: size_t (const void *) +talloc_increase_ref_count: int (const void *) +talloc_init: void *(const char *, ...) +talloc_is_parent: int (const void *, const void *) +talloc_named: void *(const void *, size_t, const char *, ...) +talloc_named_const: void *(const void *, size_t, const char *) +talloc_parent: void *(const void *) +talloc_parent_name: const char *(const void *) +talloc_pool: void *(const void *, size_t) +talloc_realloc_fn: void *(const void *, void *, size_t) +talloc_reference_count: size_t (const void *) +talloc_reparent: void *(const void *, const void *, const void *) +talloc_report: void (const void *, FILE *) +talloc_report_depth_cb: void (const void *, int, int, void (*)(const void *, int, int, int, void *), void *) +talloc_report_depth_file: void (const void *, int, int, FILE *) +talloc_report_full: void (const void *, FILE *) +talloc_set_abort_fn: void (void (*)(const char *)) +talloc_set_log_fn: void (void (*)(const char *)) +talloc_set_log_stderr: void (void) +talloc_set_memlimit: int (const void *, size_t) +talloc_set_name: const char *(const void *, const char *, ...) +talloc_set_name_const: void (const void *, const char *) +talloc_show_parents: void (const void *, FILE *) +talloc_strdup: char *(const void *, const char *) +talloc_strdup_append: char *(char *, const char *) +talloc_strdup_append_buffer: char *(char *, const char *) +talloc_strndup: char *(const void *, const char *, size_t) +talloc_strndup_append: char *(char *, const char *, size_t) +talloc_strndup_append_buffer: char *(char *, const char *, size_t) +talloc_test_get_magic: int (void) +talloc_total_blocks: size_t (const void *) +talloc_total_size: size_t (const void *) +talloc_unlink: int (const void *, void *) +talloc_vasprintf: char *(const void *, const char *, va_list) +talloc_vasprintf_append: char *(char *, const char *, va_list) +talloc_vasprintf_append_buffer: char *(char *, const char *, va_list) +talloc_version_major: int (void) +talloc_version_minor: int (void) diff --git a/lib/talloc/wscript b/lib/talloc/wscript index ae0b2276..98e3b7d 100644 --- a/lib/talloc/wscript +++ b/lib/talloc/wscript @@ -1,7 +1,7 @@ #!/usr/bin/env python APPNAME = 'talloc' -VERSION = '2.1.6' +VERSION = '2.1.7' blddir = 'bin' -- 1.9.1