From ea1efd3fc89e3e4a1733dfc5c0df5b29ca55b24b Mon Sep 17 00:00:00 2001 From: Aleksei Voronin <aleksei.voronin@demlabs.net> Date: Mon, 4 May 2020 07:46:54 +0000 Subject: [PATCH] [*] Fixed an error. From documentation: The addrlen argument should be initialized to indicate the amount of space pointed to by addr. Valgrind: "Syscall param socketcall.getpeername(namelen_in) points to uninitialised byte(s)". --- dap-sdk/crypto/src/dap_sign.c | 1 + dap-sdk/net/client/dap_client_http.c | 2 +- dap-sdk/net/core/dap_client_remote.c | 7 +++++-- dap-sdk/net/core/dap_events.c | 2 +- dap-sdk/net/core/dap_server.c | 1 + dap-sdk/net/stream/stream/dap_stream_ctl.c | 2 +- modules/channel/chain-net/dap_stream_ch_chain_net.c | 4 ++-- 7 files changed, 12 insertions(+), 7 deletions(-) diff --git a/dap-sdk/crypto/src/dap_sign.c b/dap-sdk/crypto/src/dap_sign.c index 35119c650c..b27c2c2c57 100755 --- a/dap-sdk/crypto/src/dap_sign.c +++ b/dap-sdk/crypto/src/dap_sign.c @@ -67,6 +67,7 @@ size_t dap_sign_create_output_unserialized_calc_size(dap_enc_key_t * a_key, size dap_sign_type_t dap_sign_type_from_key_type( dap_enc_key_type_t a_key_type) { dap_sign_type_t l_sign_type; + memset(&l_sign_type, 0, sizeof(l_sign_type)); switch (a_key_type){ case DAP_ENC_KEY_TYPE_SIG_BLISS: l_sign_type.type = SIG_TYPE_BLISS; break; case DAP_ENC_KEY_TYPE_SIG_PICNIC: l_sign_type.type = SIG_TYPE_PICNIC; break; diff --git a/dap-sdk/net/client/dap_client_http.c b/dap-sdk/net/client/dap_client_http.c index d210d66bfd..e5f1ae6bb2 100644 --- a/dap-sdk/net/client/dap_client_http.c +++ b/dap-sdk/net/client/dap_client_http.c @@ -89,7 +89,7 @@ static void s_http_new(dap_events_socket_t * a_es, void * arg) l_client_http_internal->content_length = 0; l_client_http_internal->response_size = 0; l_client_http_internal->response_size_max = DAP_CLIENT_HTTP_RESPONSE_SIZE_MAX; - l_client_http_internal->response = (uint8_t*) DAP_NEW_SIZE(uint8_t, DAP_CLIENT_HTTP_RESPONSE_SIZE_MAX); + l_client_http_internal->response = (uint8_t*) DAP_NEW_Z_SIZE(uint8_t, DAP_CLIENT_HTTP_RESPONSE_SIZE_MAX); } /** diff --git a/dap-sdk/net/core/dap_client_remote.c b/dap-sdk/net/core/dap_client_remote.c index a4ac7c9dbe..567ef69541 100644 --- a/dap-sdk/net/core/dap_client_remote.c +++ b/dap-sdk/net/core/dap_client_remote.c @@ -24,6 +24,7 @@ #include <stdlib.h> #include <stdio.h> #include <string.h> +#include <errno.h> #ifndef _WIN32 #include <unistd.h> @@ -72,9 +73,11 @@ void dap_client_remote_deinit( ) void _save_ip_and_port( dap_client_remote_t * cl ) { struct sockaddr_in ip_adr_get; - socklen_t ip_adr_len; + socklen_t ip_adr_len = sizeof(ip_adr_get); - getpeername( cl->socket, (struct sockaddr * restrict)&ip_adr_get, &ip_adr_len ); + int l_res = getpeername( cl->socket, (struct sockaddr * restrict)&ip_adr_get, &ip_adr_len ); + if(l_res == -1) + log_it(L_ERROR, "%s error: %s", __PRETTY_FUNCTION__, strerror(errno)); cl->port = ntohs( ip_adr_get.sin_port ); strcpy( cl->s_ip, inet_ntoa(ip_adr_get.sin_addr) ); diff --git a/dap-sdk/net/core/dap_events.c b/dap-sdk/net/core/dap_events.c index 263474944d..d6efd10913 100644 --- a/dap-sdk/net/core/dap_events.c +++ b/dap-sdk/net/core/dap_events.c @@ -312,7 +312,7 @@ static void *thread_worker_function(void *arg) continue; } //log_it(L_DEBUG, "Worker=%d fd=%d socket=%d event=0x%x(%d)", w->number_thread, w->epoll_fd,cur->socket, events[n].events,events[n].events); - int l_sock_err, l_sock_err_size; + int l_sock_err = 0, l_sock_err_size = sizeof(l_sock_err); //connection already closed (EPOLLHUP - shutdown has been made in both directions) if(events[n].events & EPOLLHUP) { // && events[n].events & EPOLLERR) { getsockopt(cur->socket, SOL_SOCKET, SO_ERROR, (void *)&l_sock_err, (socklen_t *)&l_sock_err_size); diff --git a/dap-sdk/net/core/dap_server.c b/dap-sdk/net/core/dap_server.c index 6086034461..dd199b333b 100644 --- a/dap-sdk/net/core/dap_server.c +++ b/dap-sdk/net/core/dap_server.c @@ -767,6 +767,7 @@ int32_t dap_server_loop( dap_server_t *d_server ) struct epoll_event pev; struct epoll_event events[ 16 ]; + memset(&pev, 0, sizeof(pev)); pev.events = EPOLLIN | EPOLLERR; pev.data.fd = d_server->socket_listener; diff --git a/dap-sdk/net/stream/stream/dap_stream_ctl.c b/dap-sdk/net/stream/stream/dap_stream_ctl.c index a3829e47a7..80a9427af0 100644 --- a/dap-sdk/net/stream/stream/dap_stream_ctl.c +++ b/dap-sdk/net/stream/stream/dap_stream_ctl.c @@ -141,7 +141,7 @@ void s_proc(struct dap_http_simple *a_http_simple, void * a_arg) ss = dap_stream_session_pure_new(); strncpy(ss->active_channels, l_channels_str, l_channels_str_size); - char *key_str = calloc(1, KEX_KEY_STR_SIZE); + char *key_str = calloc(1, KEX_KEY_STR_SIZE+1); dap_random_string_fill(key_str, KEX_KEY_STR_SIZE); ss->key = dap_enc_key_new_generate( s_socket_forward_key.type, key_str, KEX_KEY_STR_SIZE, NULL, 0, s_socket_forward_key.size); diff --git a/modules/channel/chain-net/dap_stream_ch_chain_net.c b/modules/channel/chain-net/dap_stream_ch_chain_net.c index 77e8db348f..22d437782c 100644 --- a/modules/channel/chain-net/dap_stream_ch_chain_net.c +++ b/modules/channel/chain-net/dap_stream_ch_chain_net.c @@ -89,8 +89,8 @@ static void session_data_del(unsigned int a_id) pthread_mutex_lock(&s_hash_mutex); HASH_FIND_INT(s_chain_net_data, &a_id, l_sdata); if(l_sdata) { - DAP_DELETE(l_sdata); HASH_DEL(s_chain_net_data, l_sdata); + DAP_DELETE(l_sdata); } pthread_mutex_unlock(&s_hash_mutex); } @@ -101,8 +101,8 @@ static void session_data_del_all() pthread_mutex_lock(&s_hash_mutex); HASH_ITER(hh, s_chain_net_data , l_sdata, l_sdata_tmp) { - DAP_DELETE(l_sdata); HASH_DEL(s_chain_net_data, l_sdata); + DAP_DELETE(l_sdata); } pthread_mutex_unlock(&s_hash_mutex); } -- GitLab