On Tue, Nov 12, 2013 at 01:42:32PM +0100, Pavel Březina wrote: > On 11/12/2013 10:03 AM, Sumit Bose wrote: > >On Mon, Nov 11, 2013 at 12:50:54PM +0100, Pavel Březina wrote: > > > >> From f9f6e1ce452f9dc507c4779e6ff74aea412e9457 Mon Sep 17 00:00:00 2001 > >>From: =?UTF-8?q?Pavel=20B=C5=99ezina?= <pbrez...@redhat.com> > >>Date: Mon, 11 Nov 2013 12:47:53 +0100 > >>Subject: [PATCH] pac: fix double free > >> > >>--- > >> src/responder/pac/pacsrv_utils.c | 14 ++++++-------- > >> 1 file changed, 6 insertions(+), 8 deletions(-) > >> > >>diff --git a/src/responder/pac/pacsrv_utils.c > >>b/src/responder/pac/pacsrv_utils.c > >>index > >>30055a1345b7d943e6adf822438263c92e53b51a..8380247b10c74d8acabec8e1a8c22944aab38320 > >> 100644 > >>--- a/src/responder/pac/pacsrv_utils.c > >>+++ b/src/responder/pac/pacsrv_utils.c > >>@@ -74,6 +74,7 @@ errno_t get_sids_from_pac(TALLOC_CTX *mem_ctx, > >> struct sss_domain_info *user_dom; > >> struct sss_domain_info *group_dom; > >> char *sid_str = NULL; > >>+ char *msid_str = NULL; > >> char *user_dom_sid_str = NULL; > >> size_t user_dom_sid_str_len; > >> enum idmap_error_code err; > >>@@ -231,24 +232,22 @@ errno_t get_sids_from_pac(TALLOC_CTX *mem_ctx, > >> > >> } > >> > >>- talloc_zfree(sid_str); > >>- > >> for(s = 0; s < info3->sidcount; s++) { > >> err = sss_idmap_smb_sid_to_sid(pac_ctx->idmap_ctx, > >> info3->sids[s].sid, > >>- &sid_str); > >>+ &msid_str); > >> if (err != IDMAP_SUCCESS) { > >> DEBUG(SSSDBG_OP_FAILURE, ("sss_idmap_smb_sid_to_sid > >> failed.\n")); > >> ret = EFAULT; > >> goto done; > >> } > >> > >>- key.str = sid_str; > >>+ key.str = msid_str; > >> value.ul = 0; > >> > >>- ret = responder_get_domain_by_id(pac_ctx->rctx, sid_str, > >>&group_dom); > >>+ ret = responder_get_domain_by_id(pac_ctx->rctx, msid_str, > >>&group_dom); > >> if (ret == EOK) { > >> ret = sysdb_search_object_by_sid(mem_ctx, group_dom->sysdb, > >>- group_dom, sid_str, NULL, > >>&msg); > >>+ group_dom, msid_str, NULL, > >>&msg); > >> if (ret == EOK && msg->count == 1 ) { > >> value.ul = ldb_msg_find_attr_as_uint64(msg->msgs[0], > >> SYSDB_GIDNUM, 0); > >>@@ -263,14 +262,13 @@ errno_t get_sids_from_pac(TALLOC_CTX *mem_ctx, > >> ret = EIO; > >> goto done; > >> } > >>- > >>- sss_idmap_free_sid(pac_ctx->idmap_ctx, sid_str); > > > >I think this should be replaced by > > > > sss_idmap_free_sid(pac_ctx->idmap_ctx, msid_str); > > msid_str = NULL; > > > >otherwise only the last allocated msid_str will be freed in the done > >section.
There is no change in first patch related to this ^^^ comment. bye, Sumit > > > >> } > >> > >> ret = EOK; > >> > >> done: > >> talloc_free(sid_str); > >>+ sss_idmap_free_sid(pac_ctx->idmap_ctx, msid_str); > >> sss_idmap_free_sid(pac_ctx->idmap_ctx, user_dom_sid_str); > >> > >> if (ret == EOK) { > >>-- > >>1.7.11.7 > >> > > > >While looking at the code I think there is a potential memory leak in > >this section as well: > > > > ret = responder_get_domain_by_id(pac_ctx->rctx, sid_str, > > &group_dom); > > if (ret == EOK) { > > ret = sysdb_search_object_by_sid(mem_ctx, group_dom->sysdb, > > group_dom, sid_str, NULL, > > &msg); > > if (ret == EOK && msg->count == 1 ) { > > value.ul = ldb_msg_find_attr_as_uint64(msg->msgs[0], > > SYSDB_GIDNUM, 0); > > talloc_free(msg); > > } > > } > > > >while msg should not be set if ret != EOK it will certainly be set if > >msg->count != 1. Although it should never happen would you mind to > >remove the talloc_free(msg) out of the if block and add a > >talloc_zfree(msg) after the if block? > > Nice catch. Patches are attached. > > > _______________________________________________ sssd-devel mailing list sssd-devel@lists.fedorahosted.org https://lists.fedorahosted.org/mailman/listinfo/sssd-devel