mirror of
https://github.com/samba-team/samba.git
synced 2025-02-26 21:57:41 +03:00
r20178: Ensure we allocate the intermediate trans structs
off conn->mem_ctx, not the null context so we can safefy free everything on conn close. Should fix possible memleak. Jeremy. (This used to be commit b33bde7b39953e171f05cdb53b6345ee3a9ec6e7)
This commit is contained in:
parent
806daad510
commit
d29722e378
@ -257,6 +257,7 @@ void conn_free_internal(connection_struct *conn)
|
||||
{
|
||||
vfs_handle_struct *handle = NULL, *thandle = NULL;
|
||||
TALLOC_CTX *mem_ctx = NULL;
|
||||
struct trans_state *state = NULL;
|
||||
|
||||
/* Free vfs_connection_struct */
|
||||
handle = conn->vfs_handles;
|
||||
@ -268,6 +269,13 @@ void conn_free_internal(connection_struct *conn)
|
||||
handle = thandle;
|
||||
}
|
||||
|
||||
/* Free any pending transactions stored on this conn. */
|
||||
for (state = conn->pending_trans; state; state = state->next) {
|
||||
/* state->setup is a talloc child of state. */
|
||||
SAFE_FREE(state->param);
|
||||
SAFE_FREE(state->data);
|
||||
}
|
||||
|
||||
free_namearray(conn->veto_list);
|
||||
free_namearray(conn->hide_list);
|
||||
free_namearray(conn->veto_oplock_list);
|
||||
|
@ -447,7 +447,7 @@ int reply_trans(connection_struct *conn, char *inbuf,char *outbuf,
|
||||
return ERROR_NT(result);
|
||||
}
|
||||
|
||||
if ((state = TALLOC_P(NULL, struct trans_state)) == NULL) {
|
||||
if ((state = TALLOC_P(conn->mem_ctx, struct trans_state)) == NULL) {
|
||||
DEBUG(0, ("talloc failed\n"));
|
||||
END_PROFILE(SMBtrans);
|
||||
return ERROR_NT(NT_STATUS_NO_MEMORY);
|
||||
@ -458,6 +458,7 @@ int reply_trans(connection_struct *conn, char *inbuf,char *outbuf,
|
||||
state->mid = SVAL(inbuf, smb_mid);
|
||||
state->vuid = SVAL(inbuf, smb_uid);
|
||||
state->setup_count = CVAL(inbuf, smb_suwcnt);
|
||||
state->setup = NULL;
|
||||
state->total_param = SVAL(inbuf, smb_tpscnt);
|
||||
state->param = NULL;
|
||||
state->total_data = SVAL(inbuf, smb_tdscnt);
|
||||
|
@ -2845,7 +2845,7 @@ int reply_nttrans(connection_struct *conn,
|
||||
return ERROR_NT(result);
|
||||
}
|
||||
|
||||
if ((state = TALLOC_P(NULL, struct trans_state)) == NULL) {
|
||||
if ((state = TALLOC_P(conn->mem_ctx, struct trans_state)) == NULL) {
|
||||
END_PROFILE(SMBnttrans);
|
||||
return ERROR_DOS(ERRSRV,ERRaccess);
|
||||
}
|
||||
@ -2862,6 +2862,7 @@ int reply_nttrans(connection_struct *conn,
|
||||
|
||||
/* setup count is in *words* */
|
||||
state->setup_count = 2*CVAL(inbuf,smb_nt_SetupCount);
|
||||
state->setup = NULL;
|
||||
state->call = function_code;
|
||||
|
||||
/*
|
||||
|
@ -5265,7 +5265,7 @@ int reply_trans2(connection_struct *conn, char *inbuf,char *outbuf,
|
||||
return ERROR_DOS(ERRSRV,ERRaccess);
|
||||
}
|
||||
|
||||
if ((state = TALLOC_P(NULL, struct trans_state)) == NULL) {
|
||||
if ((state = TALLOC_P(conn->mem_ctx, struct trans_state)) == NULL) {
|
||||
DEBUG(0, ("talloc failed\n"));
|
||||
END_PROFILE(SMBtrans2);
|
||||
return ERROR_NT(NT_STATUS_NO_MEMORY);
|
||||
@ -5276,6 +5276,7 @@ int reply_trans2(connection_struct *conn, char *inbuf,char *outbuf,
|
||||
state->mid = SVAL(inbuf, smb_mid);
|
||||
state->vuid = SVAL(inbuf, smb_uid);
|
||||
state->setup_count = SVAL(inbuf, smb_suwcnt);
|
||||
state->setup = NULL;
|
||||
state->total_param = SVAL(inbuf, smb_tpscnt);
|
||||
state->param = NULL;
|
||||
state->total_data = SVAL(inbuf, smb_tdscnt);
|
||||
|
Loading…
x
Reference in New Issue
Block a user