From: Volker Lendecke Date: Wed, 20 Mar 2019 12:50:03 +0000 (+0100) Subject: rpc_server: Make make_server_pipes_struct API safer X-Git-Tag: tdb-1.4.1~640 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9bebe5c7db2e3452eb8f72dcc9f6270c1823963f;p=thirdparty%2Fsamba.git rpc_server: Make make_server_pipes_struct API safer Make it clear that we talloc_steal by NULLing out the caller's session_info Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison --- diff --git a/source3/rpc_server/rpc_ncacn_np.c b/source3/rpc_server/rpc_ncacn_np.c index 5ee98a10d70..2b48336a15b 100644 --- a/source3/rpc_server/rpc_ncacn_np.c +++ b/source3/rpc_server/rpc_ncacn_np.c @@ -164,7 +164,7 @@ NTSTATUS make_internal_rpc_pipe_socketpair( NCACN_NP, npc->remote_client_addr, npc->local_server_addr, - npc->session_info, + &npc->session_info, &npc->p, &error); if (rc == -1) { diff --git a/source3/rpc_server/rpc_server.c b/source3/rpc_server/rpc_server.c index 050f36d0aad..2f6ad6e2d2f 100644 --- a/source3/rpc_server/rpc_server.c +++ b/source3/rpc_server/rpc_server.c @@ -42,10 +42,11 @@ int make_server_pipes_struct(TALLOC_CTX *mem_ctx, enum dcerpc_transport_t transport, const struct tsocket_address *remote_address, const struct tsocket_address *local_address, - struct auth_session_info *session_info, + struct auth_session_info **psession_info, struct pipes_struct **_p, int *perrno) { + struct auth_session_info *session_info = *psession_info; struct pipes_struct *p; int ret; @@ -67,7 +68,7 @@ int make_server_pipes_struct(TALLOC_CTX *mem_ctx, } /* Don't call create_local_token(), we already have the full details here */ - p->session_info = talloc_steal(p, session_info); + p->session_info = talloc_move(p, psession_info); *_p = p; return 0; @@ -380,7 +381,7 @@ static void named_pipe_accept_done(struct tevent_req *subreq) npc->pipe_name, NCACN_NP, npc->remote_client_addr, npc->local_server_addr, - npc->session_info, + &npc->session_info, &npc->p, &error); if (ret != 0) { DEBUG(2, ("Failed to create pipes_struct! (%s)\n", @@ -1127,7 +1128,7 @@ void dcerpc_ncacn_accept(struct tevent_context *ev_ctx, ncacn_conn->transport, ncacn_conn->remote_client_addr, ncacn_conn->local_server_addr, - ncacn_conn->session_info, + &ncacn_conn->session_info, &ncacn_conn->p, &sys_errno); if (rc < 0) { diff --git a/source3/rpc_server/rpc_server.h b/source3/rpc_server/rpc_server.h index fd8c652f067..3140e966b80 100644 --- a/source3/rpc_server/rpc_server.h +++ b/source3/rpc_server/rpc_server.h @@ -71,7 +71,7 @@ int make_server_pipes_struct(TALLOC_CTX *mem_ctx, enum dcerpc_transport_t transport, const struct tsocket_address *remote_address, const struct tsocket_address *local_address, - struct auth_session_info *session_info, + struct auth_session_info **session_info, struct pipes_struct **_p, int *perrno);