summaryrefslogtreecommitdiff
path: root/source4/auth
diff options
context:
space:
mode:
authorGarming Sam <garming@catalyst.net.nz>2019-05-07 13:28:49 +1200
committerGary Lockyer <gary@samba.org>2019-05-08 00:36:14 +0000
commit93061fb822d5af5c29f223e9fe1ce91b7264f082 (patch)
tree04d6cbae86e94e746f6788be85f27791b7239325 /source4/auth
parenta4973270423203d9881cdbf2d24fadd02c3228c0 (diff)
downloadsamba-93061fb822d5af5c29f223e9fe1ce91b7264f082.tar.gz
CID 1363286: Resource leak by failing to free tmp_ctx
There are a few oddities in this function, including a duplicated NULL check, a talloc_free of a context which is passed in and a number of missing frees before a return. Signed-off-by: Garming Sam <garming@catalyst.net.nz> Reviewed-by: Gary Lockyer <gary@catalyst.net.nz> Autobuild-User(master): Gary Lockyer <gary@samba.org> Autobuild-Date(master): Wed May 8 00:36:14 UTC 2019 on sn-devel-184
Diffstat (limited to 'source4/auth')
-rw-r--r--source4/auth/session.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/source4/auth/session.c b/source4/auth/session.c
index 3a8c40b7fb8..71d236aa3e1 100644
--- a/source4/auth/session.c
+++ b/source4/auth/session.c
@@ -115,10 +115,6 @@ _PUBLIC_ NTSTATUS auth_generate_session_info(TALLOC_CTX *mem_ctx,
TALLOC_FREE(tmp_ctx);
return NT_STATUS_NO_MEMORY;
}
- if (!sids) {
- talloc_free(tmp_ctx);
- return NT_STATUS_NO_MEMORY;
- }
num_sids = user_info_dc->num_sids;
@@ -134,14 +130,19 @@ _PUBLIC_ NTSTATUS auth_generate_session_info(TALLOC_CTX *mem_ctx,
if (session_info_flags & AUTH_SESSION_INFO_DEFAULT_GROUPS) {
sids = talloc_realloc(tmp_ctx, sids, struct dom_sid, num_sids + 2);
- NT_STATUS_HAVE_NO_MEMORY(sids);
+ if (sids == NULL) {
+ TALLOC_FREE(tmp_ctx);
+ return NT_STATUS_NO_MEMORY;
+ }
if (!dom_sid_parse(SID_WORLD, &sids[num_sids])) {
+ TALLOC_FREE(tmp_ctx);
return NT_STATUS_INTERNAL_ERROR;
}
num_sids++;
if (!dom_sid_parse(SID_NT_NETWORK, &sids[num_sids])) {
+ TALLOC_FREE(tmp_ctx);
return NT_STATUS_INTERNAL_ERROR;
}
num_sids++;
@@ -149,9 +150,13 @@ _PUBLIC_ NTSTATUS auth_generate_session_info(TALLOC_CTX *mem_ctx,
if (session_info_flags & AUTH_SESSION_INFO_AUTHENTICATED) {
sids = talloc_realloc(tmp_ctx, sids, struct dom_sid, num_sids + 1);
- NT_STATUS_HAVE_NO_MEMORY(sids);
+ if (sids == NULL) {
+ TALLOC_FREE(tmp_ctx);
+ return NT_STATUS_NO_MEMORY;
+ }
if (!dom_sid_parse(SID_NT_AUTHENTICATED_USERS, &sids[num_sids])) {
+ TALLOC_FREE(tmp_ctx);
return NT_STATUS_INTERNAL_ERROR;
}
num_sids++;
@@ -159,9 +164,13 @@ _PUBLIC_ NTSTATUS auth_generate_session_info(TALLOC_CTX *mem_ctx,
if (session_info_flags & AUTH_SESSION_INFO_NTLM) {
sids = talloc_realloc(tmp_ctx, sids, struct dom_sid, num_sids + 1);
- NT_STATUS_HAVE_NO_MEMORY(sids);
+ if (sids == NULL) {
+ TALLOC_FREE(tmp_ctx);
+ return NT_STATUS_NO_MEMORY;
+ }
if (!dom_sid_parse(SID_NT_NTLM_AUTHENTICATION, &sids[num_sids])) {
+ TALLOC_FREE(tmp_ctx);
return NT_STATUS_INTERNAL_ERROR;
}
num_sids++;
@@ -187,11 +196,11 @@ _PUBLIC_ NTSTATUS auth_generate_session_info(TALLOC_CTX *mem_ctx,
"<SID=%s>",
dom_sid_str_buf(&sids[i], &buf));
if (sid_dn == NULL) {
- TALLOC_FREE(user_info_dc);
+ TALLOC_FREE(tmp_ctx);
return NT_STATUS_NO_MEMORY;
}
sid_blob = data_blob_string_const(sid_dn);
-
+
/* This function takes in memberOf values and expands
* them, as long as they meet the filter - so only
* builtin groups