mirror of
https://git.libssh.org/projects/libssh.git
synced 2026-02-09 09:54:25 +09:00
In handle_channel_request_open(), variable type is freed too early and cause memory corruptions.
Signed-off-by: Vic Lee <llyzs@163.com> Signed-off-by: Andreas Schneider <mail@cynapses.org>
This commit is contained in:
committed by
Andreas Schneider
parent
5a95681f01
commit
4768cf3e85
@@ -319,7 +319,6 @@ static ssh_message handle_channel_request_open(ssh_session session) {
|
|||||||
|
|
||||||
ssh_log(session, SSH_LOG_PACKET,
|
ssh_log(session, SSH_LOG_PACKET,
|
||||||
"Clients wants to open a %s channel", type_c);
|
"Clients wants to open a %s channel", type_c);
|
||||||
string_free(type);
|
|
||||||
|
|
||||||
buffer_get_u32(session->in_buffer, &sender);
|
buffer_get_u32(session->in_buffer, &sender);
|
||||||
buffer_get_u32(session->in_buffer, &window);
|
buffer_get_u32(session->in_buffer, &window);
|
||||||
@@ -331,6 +330,7 @@ static ssh_message handle_channel_request_open(ssh_session session) {
|
|||||||
|
|
||||||
if (strcmp(type_c,"session") == 0) {
|
if (strcmp(type_c,"session") == 0) {
|
||||||
msg->channel_request_open.type = SSH_CHANNEL_SESSION;
|
msg->channel_request_open.type = SSH_CHANNEL_SESSION;
|
||||||
|
string_free(type);
|
||||||
SAFE_FREE(type_c);
|
SAFE_FREE(type_c);
|
||||||
leave_function();
|
leave_function();
|
||||||
return msg;
|
return msg;
|
||||||
@@ -370,6 +370,7 @@ static ssh_message handle_channel_request_open(ssh_session session) {
|
|||||||
msg->channel_request_open.originator_port = ntohl(originator_port);
|
msg->channel_request_open.originator_port = ntohl(originator_port);
|
||||||
|
|
||||||
msg->channel_request_open.type = SSH_CHANNEL_DIRECT_TCPIP;
|
msg->channel_request_open.type = SSH_CHANNEL_DIRECT_TCPIP;
|
||||||
|
string_free(type);
|
||||||
SAFE_FREE(type_c);
|
SAFE_FREE(type_c);
|
||||||
leave_function();
|
leave_function();
|
||||||
return msg;
|
return msg;
|
||||||
@@ -409,6 +410,7 @@ static ssh_message handle_channel_request_open(ssh_session session) {
|
|||||||
msg->channel_request_open.originator_port = ntohl(originator_port);
|
msg->channel_request_open.originator_port = ntohl(originator_port);
|
||||||
|
|
||||||
msg->channel_request_open.type = SSH_CHANNEL_FORWARDED_TCPIP;
|
msg->channel_request_open.type = SSH_CHANNEL_FORWARDED_TCPIP;
|
||||||
|
string_free(type);
|
||||||
SAFE_FREE(type_c);
|
SAFE_FREE(type_c);
|
||||||
leave_function();
|
leave_function();
|
||||||
return msg;
|
return msg;
|
||||||
@@ -432,12 +434,14 @@ static ssh_message handle_channel_request_open(ssh_session session) {
|
|||||||
msg->channel_request_open.originator_port = ntohl(originator_port);
|
msg->channel_request_open.originator_port = ntohl(originator_port);
|
||||||
|
|
||||||
msg->channel_request_open.type = SSH_CHANNEL_X11;
|
msg->channel_request_open.type = SSH_CHANNEL_X11;
|
||||||
|
string_free(type);
|
||||||
SAFE_FREE(type_c);
|
SAFE_FREE(type_c);
|
||||||
leave_function();
|
leave_function();
|
||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
msg->channel_request_open.type = SSH_CHANNEL_UNKNOWN;
|
msg->channel_request_open.type = SSH_CHANNEL_UNKNOWN;
|
||||||
|
string_free(type);
|
||||||
SAFE_FREE(type_c);
|
SAFE_FREE(type_c);
|
||||||
|
|
||||||
leave_function();
|
leave_function();
|
||||||
|
|||||||
Reference in New Issue
Block a user