Skip to content

Commit 4091f1b

Browse files
author
Tero Heinonen
authored
Check for coap_security_handler_connect_non_blocking return value (ARMmbed#100)
Check return value from function coap_security_handler_connect_non_blocking and remove secure session if connection fails.
1 parent 1cb994e commit 4091f1b

File tree

1 file changed

+14
-4
lines changed

1 file changed

+14
-4
lines changed

source/coap_connection_handler.c

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ static secure_session_t *secure_session_create(internal_socket_t *parent, const
175175
}
176176
}
177177
if(!to_be_removed){
178+
tr_err("max session count exceeded");
178179
return NULL;
179180
}
180181

@@ -188,6 +189,7 @@ static secure_session_t *secure_session_create(internal_socket_t *parent, const
188189
}
189190
}
190191
if(handshakes >= max_handshakes) {
192+
tr_err("ongoing handshakes exceeded");
191193
return NULL;
192194
}
193195

@@ -215,6 +217,7 @@ static secure_session_t *secure_session_create(internal_socket_t *parent, const
215217
this->sec_handler = coap_security_create(parent->socket, this->timer.id, this, secure_mode,
216218
&secure_session_sendto, &secure_session_recvfrom, &start_timer, &timer_status);
217219
if( !this->sec_handler ){
220+
tr_err("security create failed");
218221
ns_dyn_mem_free(this);
219222
return NULL;
220223
}
@@ -647,9 +650,11 @@ static void secure_recv_sckt_msg(void *cb_res)
647650
session->last_contact_time = coap_service_get_internal_timer_ticks();
648651
// Start handshake
649652
if (!coap_security_handler_is_started(session->sec_handler)) {
650-
coap_security_handler_connect_non_blocking(session->sec_handler, true, DTLS, keys, sock->timeout_min, sock->timeout_max);
653+
if(-1 == coap_security_handler_connect_non_blocking(session->sec_handler, true, DTLS, keys, sock->timeout_min, sock->timeout_max)) {
654+
tr_err("Connection start failed");
655+
secure_session_delete(session);
656+
}
651657
ns_dyn_mem_free(keys._key);
652-
653658
}
654659
} else {
655660
//Continue handshake
@@ -742,11 +747,16 @@ int coap_connection_handler_virtual_recv(coap_conn_handler_t *handler, uint8_t a
742747
if (sock->parent->_get_password_cb && 0 == sock->parent->_get_password_cb(sock->socket, address, port, &keys)) {
743748
session = secure_session_create(sock, address, port, keys.mode);
744749
if (!session) {
745-
tr_err("coap_connection_handler_virtual_recv session creation failed - OOM");
750+
tr_err("coap_connection_handler_virtual_recv session creation failed");
746751
ns_dyn_mem_free(keys._key);
747752
return -1;
748753
}
749-
coap_security_handler_connect_non_blocking(session->sec_handler, true, DTLS, keys, handler->socket->timeout_min, handler->socket->timeout_max);
754+
if (-1 == coap_security_handler_connect_non_blocking(session->sec_handler, true, DTLS, keys, handler->socket->timeout_min, handler->socket->timeout_max)) {
755+
tr_err("Connection start failed");
756+
ns_dyn_mem_free(keys._key);
757+
secure_session_delete(session);
758+
return -1;
759+
}
750760
ns_dyn_mem_free(keys._key);
751761
return 0;
752762
} else {

0 commit comments

Comments
 (0)