summaryrefslogtreecommitdiffstats
path: root/source3
diff options
context:
space:
mode:
authorGregor Beck <gbeck@sernet.de>2013-11-01 09:02:48 +0100
committerAndreas Schneider <asn@cryptomilk.org>2013-11-04 12:30:26 +0100
commite2d6431cd4d3dee6a777e6c1063b42b8a0fa0cef (patch)
tree3a4bdb2c62aee857a2494d5e977a9e3cb30c5729 /source3
parent73062533e0cf5adddafed637327455ae52cab486 (diff)
downloadsamba-e2d6431cd4d3dee6a777e6c1063b42b8a0fa0cef.tar.gz
samba-e2d6431cd4d3dee6a777e6c1063b42b8a0fa0cef.tar.xz
samba-e2d6431cd4d3dee6a777e6c1063b42b8a0fa0cef.zip
s3:rpc_server: rpc_create_tcpip_sockets() may leak talloc_stackframe on failure
BUG: https://bugzilla.samba.org/show_bug.cgi?id=10241 Signed-off-by: Gregor Beck <gbeck@sernet.de> Reviewed-by: Andreas Schneider <asn@samba.org> Autobuild-User(master): Andreas Schneider <asn@cryptomilk.org> Autobuild-Date(master): Mon Nov 4 12:30:27 CET 2013 on sn-devel-104
Diffstat (limited to 'source3')
-rw-r--r--source3/rpc_server/rpc_sock_helper.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/source3/rpc_server/rpc_sock_helper.c b/source3/rpc_server/rpc_sock_helper.c
index 650dd9d23c..8f371b8e90 100644
--- a/source3/rpc_server/rpc_sock_helper.c
+++ b/source3/rpc_server/rpc_sock_helper.c
@@ -142,7 +142,7 @@ NTSTATUS rpc_create_tcpip_sockets(const struct ndr_interface_table *iface,
p);
if (!NT_STATUS_IS_OK(status)) {
close(fd);
- return status;
+ goto done;
}
}
}
@@ -201,13 +201,15 @@ NTSTATUS rpc_setup_tcpip_sockets(struct tevent_context *ev_ctx,
sizeof(struct sockaddr_storage),
&bind_addr);
if (rc < 0) {
- return NT_STATUS_NO_MEMORY;
+ status = NT_STATUS_NO_MEMORY;
+ goto done;
}
addr = tsocket_address_inet_addr_string(bind_addr,
tmp_ctx);
if (addr == NULL) {
- return NT_STATUS_NO_MEMORY;
+ status = NT_STATUS_NO_MEMORY;
+ goto done;
}
status = dcerpc_binding_vector_add_port(iface,
@@ -215,7 +217,7 @@ NTSTATUS rpc_setup_tcpip_sockets(struct tevent_context *ev_ctx,
addr,
p);
if (!NT_STATUS_IS_OK(status)) {
- return status;
+ goto done;
}
}
}
@@ -247,7 +249,8 @@ NTSTATUS rpc_setup_tcpip_sockets(struct tevent_context *ev_ctx,
&ss,
port);
if (p == 0) {
- return NT_STATUS_UNSUCCESSFUL;
+ status = NT_STATUS_UNSUCCESSFUL;
+ goto done;
}
if (bvec != NULL) {
@@ -256,7 +259,7 @@ NTSTATUS rpc_setup_tcpip_sockets(struct tevent_context *ev_ctx,
sock_tok,
p);
if (!NT_STATUS_IS_OK(status)) {
- return status;
+ goto done;
}
}
}