From ca567117b028d8954453585bfb753e7f01c98319 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 11 Aug 2011 12:07:55 +0200 Subject: s3:libsmb: use talloc_stackframe() in cli_smb_received() metze --- source3/libsmb/async_smb.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/source3/libsmb/async_smb.c b/source3/libsmb/async_smb.c index f2fb5943cc..b2856f6779 100644 --- a/source3/libsmb/async_smb.c +++ b/source3/libsmb/async_smb.c @@ -551,6 +551,7 @@ static void cli_smb_received(struct tevent_req *subreq) { struct cli_state *cli = tevent_req_callback_data( subreq, struct cli_state); + TALLOC_CTX *frame = talloc_stackframe(); struct tevent_req *req; struct cli_smb_state *state; NTSTATUS status; @@ -569,12 +570,13 @@ static void cli_smb_received(struct tevent_req *subreq) return; } - received = read_smb_recv(subreq, talloc_tos(), &inbuf, &err); + received = read_smb_recv(subreq, frame, &inbuf, &err); TALLOC_FREE(subreq); cli->conn.read_smb_req = NULL; if (received == -1) { status = map_nt_error_from_unix(err); cli_state_notify_pending(cli, status); + TALLOC_FREE(frame); return; } @@ -583,6 +585,7 @@ static void cli_smb_received(struct tevent_req *subreq) DEBUG(10, ("Got non-SMB PDU\n")); status = NT_STATUS_INVALID_NETWORK_RESPONSE; cli_state_notify_pending(cli, status); + TALLOC_FREE(frame); return; } @@ -594,6 +597,7 @@ static void cli_smb_received(struct tevent_req *subreq) DEBUG(10, ("get_enc_ctx_num returned %s\n", nt_errstr(status))); cli_state_notify_pending(cli, status); + TALLOC_FREE(frame); return; } @@ -603,6 +607,7 @@ static void cli_smb_received(struct tevent_req *subreq) cli->trans_enc_state->enc_ctx_num)); status = NT_STATUS_INVALID_HANDLE; cli_state_notify_pending(cli, status); + TALLOC_FREE(frame); return; } @@ -612,6 +617,7 @@ static void cli_smb_received(struct tevent_req *subreq) DEBUG(10, ("common_decrypt_buffer returned %s\n", nt_errstr(status))); cli_state_notify_pending(cli, status); + TALLOC_FREE(frame); return; } } @@ -626,7 +632,6 @@ static void cli_smb_received(struct tevent_req *subreq) } if (i == num_pending) { /* Dump unexpected reply */ - TALLOC_FREE(inbuf); goto done; } @@ -644,7 +649,6 @@ static void cli_smb_received(struct tevent_req *subreq) if (!oplock_break) { /* Dump unexpected reply */ - TALLOC_FREE(inbuf); goto done; } } @@ -655,9 +659,9 @@ static void cli_smb_received(struct tevent_req *subreq) if (!oplock_break /* oplock breaks are not signed */ && !cli_check_sign_mac(cli, (char *)inbuf, state->seqnum+1)) { DEBUG(10, ("cli_check_sign_mac failed\n")); - TALLOC_FREE(inbuf); status = NT_STATUS_ACCESS_DENIED; cli_state_notify_pending(cli, status); + TALLOC_FREE(frame); return; } @@ -668,8 +672,8 @@ static void cli_smb_received(struct tevent_req *subreq) state->chain_length = 1; tevent_req_done(req); } else { - struct tevent_req **chain = talloc_move( - talloc_tos(), &state->chained_requests); + struct tevent_req **chain = talloc_move(frame, + &state->chained_requests); int num_chained = talloc_array_length(chain); for (i=0; iconn.pending) > 0) && (cli->conn.read_smb_req == NULL)) { /* -- cgit