Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP4:Update
sssd.13028
0022-AD-avoid-memory-leak-in-netlogon_get_domai...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0022-AD-avoid-memory-leak-in-netlogon_get_domain_info-and.patch of Package sssd.13028
From 215237b6755520897dc6eac42aff1560309dbd89 Mon Sep 17 00:00:00 2001 From: Sumit Bose <sbose@redhat.com> Date: Tue, 12 Jul 2016 13:16:43 +0200 Subject: [PATCH 1/4] AD: avoid memory leak in netlogon_get_domain_info() and make it public Reviewed-by: Jakub Hrozek <jhrozek@redhat.com> (cherry picked from commit 74bef2150c76c8814bf4c1654ecd3660604eb4e6) --- src/providers/ad/ad_common.h | 6 ++++++ src/providers/ad/ad_domain_info.c | 29 ++++++++++++++++++++--------- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/providers/ad/ad_common.h b/src/providers/ad/ad_common.h index e2b62d735..3f1414f2b 100644 --- a/src/providers/ad/ad_common.h +++ b/src/providers/ad/ad_common.h @@ -187,4 +187,10 @@ int ad_autofs_init(struct be_ctx *be_ctx, errno_t ad_machine_account_password_renewal_init(struct be_ctx *be_ctx, struct ad_options *ad_opts); +errno_t netlogon_get_domain_info(TALLOC_CTX *mem_ctx, + struct sysdb_attrs *reply, + char **_flat_name, + char **_site, + char **_forest); + #endif /* AD_COMMON_H_ */ diff --git a/src/providers/ad/ad_domain_info.c b/src/providers/ad/ad_domain_info.c index 5f17ae542..a06379c26 100644 --- a/src/providers/ad/ad_domain_info.c +++ b/src/providers/ad/ad_domain_info.c @@ -35,12 +35,11 @@ #include "providers/ad/ad_common.h" #include "util/util.h" -static errno_t -netlogon_get_domain_info(TALLOC_CTX *mem_ctx, - struct sysdb_attrs *reply, - char **_flat_name, - char **_site, - char **_forest) +errno_t netlogon_get_domain_info(TALLOC_CTX *mem_ctx, + struct sysdb_attrs *reply, + char **_flat_name, + char **_site, + char **_forest) { errno_t ret; struct ldb_message_element *el; @@ -51,6 +50,7 @@ netlogon_get_domain_info(TALLOC_CTX *mem_ctx, const char *flat_name; const char *site; const char *forest; + TALLOC_CTX *tmp_ctx; ret = sysdb_attrs_get_el(reply, AD_AT_NETLOGON, &el); if (ret != EOK) { @@ -66,13 +66,24 @@ netlogon_get_domain_info(TALLOC_CTX *mem_ctx, return EIO; } + tmp_ctx = talloc_new(NULL); + if (tmp_ctx == NULL) { + DEBUG(SSSDBG_OP_FAILURE, "talloc_new failed.\n"); + return ENOMEM; + } + blob.data = el->values[0].data; blob.length = el->values[0].length; - ndr_pull = ndr_pull_init_blob(&blob, mem_ctx); + /* The ndr_pull_* calls do not use ndr_pull as a talloc context to + * allocate memory but the second argument of ndr_pull_init_blob(). To + * make sure no memory is leaked here a temporary talloc context is + * needed. */ + ndr_pull = ndr_pull_init_blob(&blob, tmp_ctx); if (ndr_pull == NULL) { DEBUG(SSSDBG_OP_FAILURE, "ndr_pull_init_blob() failed.\n"); - return ENOMEM; + ret = ENOMEM; + goto done; } ndr_err = ndr_pull_netlogon_samlogon_response(ndr_pull, NDR_SCALARS, @@ -146,7 +157,7 @@ netlogon_get_domain_info(TALLOC_CTX *mem_ctx, ret = EOK; done: - talloc_free(ndr_pull); + talloc_free(tmp_ctx); return ret; } -- 2.23.0
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor