diff --git a/src/auth.c b/src/auth.c index 8ab80ee0..b4b17eb5 100644 --- a/src/auth.c +++ b/src/auth.c @@ -966,6 +966,10 @@ int ssh_userauth_agent(ssh_session session, } if (!session->agent_state){ session->agent_state = malloc(sizeof(struct ssh_agent_state_struct)); + if (!session->agent_state){ + ssh_set_error_oom(session); + return SSH_AUTH_ERROR; + } ZERO_STRUCTP(session->agent_state); session->agent_state->state=SSH_AGENT_STATE_NONE; } diff --git a/src/channels.c b/src/channels.c index 9a4e938d..8879b0fe 100644 --- a/src/channels.c +++ b/src/channels.c @@ -1542,7 +1542,7 @@ static int channel_request(ssh_channel channel, const char *request, } pending: rc = ssh_handle_packets_termination(session,SSH_TIMEOUT_USER, ssh_channel_request_termination, channel); - if(session->session_state == SSH_SESSION_STATE_ERROR) { + if(session->session_state == SSH_SESSION_STATE_ERROR || rc == SSH_ERROR) { channel->request_state = SSH_CHANNEL_REQ_STATE_ERROR; } /* we received something */ diff --git a/src/ecdh.c b/src/ecdh.c index 706ad689..95834730 100644 --- a/src/ecdh.c +++ b/src/ecdh.c @@ -251,7 +251,8 @@ int ssh_server_ecdh_init(ssh_session session, ssh_buffer packet){ ssh_log(session,SSH_LOG_PROTOCOL, "SSH_MSG_KEXDH_REPLY sent"); rc = packet_send(session); - + if (rc == SSH_ERROR) + goto error; /* Send the MSG_NEWKEYS */ if (buffer_add_u8(session->out_buffer, SSH2_MSG_NEWKEYS) < 0) { diff --git a/src/server.c b/src/server.c index 5acbd4ae..054e435e 100644 --- a/src/server.c +++ b/src/server.c @@ -165,6 +165,8 @@ SSH_PACKET_CALLBACK(ssh_packet_kexdh_init){ default: ssh_set_error(session,SSH_FATAL,"Wrong kex type in ssh_packet_kexdh_init"); } + if (rc == SSH_ERROR) + session->session_state = SSH_SESSION_STATE_ERROR; error: leave_function(); return SSH_PACKET_USED;