From 77bbc184e2cb41da4889379d93fa20ef6293d4c7 Mon Sep 17 00:00:00 2001 From: Annie Rashmitha Date: Wed, 7 Jan 2026 11:16:56 +0000 Subject: [PATCH 1/8] Memory leak fix --- source/InterDeviceManager/Idm_TCP_apis.c | 23 +++++- source/InterDeviceManager/Idm_TCP_apis.h | 3 + .../InterDeviceManager/Idm_call_back_apis.c | 8 +- source/InterDeviceManager/Idm_msg_process.c | 75 +++++++++++++++---- 4 files changed, 90 insertions(+), 19 deletions(-) diff --git a/source/InterDeviceManager/Idm_TCP_apis.c b/source/InterDeviceManager/Idm_TCP_apis.c index b5af977..541dff5 100644 --- a/source/InterDeviceManager/Idm_TCP_apis.c +++ b/source/InterDeviceManager/Idm_TCP_apis.c @@ -41,7 +41,8 @@ extern char g_sslSeCA[128]; #endif bool ssl_lib_init = false; bool TCP_server_started = false; - +bool connect_reset = false; +pthread_mutex_t connect_reset_mutex = PTHREAD_MUTEX_INITIALIZER; typedef int (*callback_recv)( connection_info_t* conn_info, void *payload); typedef struct tcp_server_threadargs @@ -526,8 +527,20 @@ int open_remote_connection(connection_config_t* connectionConf, int (*connection servaddr.sin_port = htons(connectionConf->port); CcspTraceInfo(("waiting to connect to the IDM server..\n")); + connect_reset = false; + while (1) { + pthread_mutex_lock(&connect_reset_mutex); + if (connect_reset == true) + { + CcspTraceInfo(("Connect stopped since discovery is restarted")); + pthread_mutex_unlock(&connect_reset_mutex); + close(client_sockfd); + return -1; //This discovery is omitted due to discovery restart + } + pthread_mutex_unlock(&connect_reset_mutex); + // Wait indefinitely untill other end idm server accepts the connection if (connect(client_sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) != 0) { @@ -538,6 +551,7 @@ int open_remote_connection(connection_config_t* connectionConf, int (*connection break; } } + //TODO: check for dynamic allocation connection_info_t conn_info; conn_info.conn = client_sockfd; @@ -846,12 +860,15 @@ int send_remote_message(connection_info_t* conn_info,void *payload) #ifndef IDM_DEBUG int val; if (conn_info->enc.ctx != NULL && conn_info->enc.ssl != NULL) { - if ((val = SSL_write(conn_info->enc.ssl, payload, sizeof(payload_t))) > 0) { + val = SSL_write(conn_info->enc.ssl, payload, sizeof(payload_t)); + if (val > 0) { + CcspTraceInfo(("(%s:%d) SSL_write successful connection id %d \n", __FUNCTION__, __LINE__,conn_info->conn)); return 0; } else { - CcspTraceError(("(%s:%d) Data encryption failed (Err: %d)", __FUNCTION__, __LINE__, val)); + int ssl_err = SSL_get_error(conn_info->enc.ssl, val); + CcspTraceError(("(%s:%d) SSL_write failed (Ret: %d, SSL Error: %d)\n", __FUNCTION__, __LINE__, val, ssl_err)); } } else diff --git a/source/InterDeviceManager/Idm_TCP_apis.h b/source/InterDeviceManager/Idm_TCP_apis.h index 1d92c4b..2f33111 100644 --- a/source/InterDeviceManager/Idm_TCP_apis.h +++ b/source/InterDeviceManager/Idm_TCP_apis.h @@ -23,6 +23,9 @@ #include "Idm_rbus.h" #include "Idm_msg_process.h" +extern bool connect_reset; +extern pthread_mutex_t connect_reset_mutex; + int open_remote_connection(connection_config_t* connectionConf, int (*connection_cb)(device_info_t* Device, connection_info_t* conn_info, uint encryption_status), int (*rcv_message_cb)( connection_info_t* conn_info, void *payload)) ; int send_remote_message(connection_info_t* conn_info, void *payload); diff --git a/source/InterDeviceManager/Idm_call_back_apis.c b/source/InterDeviceManager/Idm_call_back_apis.c index 1b4dc44..fe7d661 100644 --- a/source/InterDeviceManager/Idm_call_back_apis.c +++ b/source/InterDeviceManager/Idm_call_back_apis.c @@ -77,9 +77,10 @@ int stop_discovery(); int rcv_message_cb( connection_info_t* conn_info, void *payload) { - CcspTraceInfo(("%s %d - \n", __FUNCTION__, __LINE__)); payload_t *recvData = (payload_t*)payload; + CcspTraceInfo(("%s %d - msgType-%d \n", __FUNCTION__, __LINE__,recvData->msgType)); + if(recvData->msgType == REQ) { IDM_Incoming_Request_handler(recvData); @@ -823,6 +824,11 @@ ANSC_STATUS IDM_Start_Device_Discovery() ANSC_STATUS IDM_Stop_Device_Discovery() { CcspTraceInfo(("%s %d - called\n", __FUNCTION__, __LINE__ )); + + pthread_mutex_lock(&connect_reset_mutex); + connect_reset = true; //To exit any previous waiting connect + pthread_mutex_unlock(&connect_reset_mutex); + if(stop_discovery() !=0) { CcspTraceError(("%s %d - stop_discovery failed\n", __FUNCTION__, __LINE__)); diff --git a/source/InterDeviceManager/Idm_msg_process.c b/source/InterDeviceManager/Idm_msg_process.c index b0a7bba..59c9ec4 100644 --- a/source/InterDeviceManager/Idm_msg_process.c +++ b/source/InterDeviceManager/Idm_msg_process.c @@ -109,6 +109,25 @@ sendReqList* IDM_getFromSendRequestList(uint reqID) } } +sendReqList* IDM_searchFromSendRequestList(const char *param_mac) +{ + + if(param_mac == NULL) + { + return NULL; + } + + sendReqList *cur = headsendReqList; + while (cur != NULL) + { + if (strncmp(cur->Mac_dest, param_mac, sizeof(cur->Mac_dest) - 1) == 0) + { + return cur; + } + cur = cur->next; + } + return NULL; +} void IDM_addToSendSubscriptionuestList( sendSubscriptionList *newSubscription) { @@ -318,31 +337,40 @@ ANSC_STATUS IDM_sendMsg_to_Remote_device(idm_send_msg_Params_t *param) memset(&payload, 0, sizeof(payload_t)); if(param->operation == GET || param->operation == SET || param->operation == IDM_REQUEST) { - /* Create request entry */ - sendReqList *newReq = malloc(sizeof(sendReqList)); - if (newReq != NULL) { - memset(newReq, 0, sizeof(sendReqList)); - newReq->reqId = gReqIdCounter++; - strncpy(newReq->Mac_dest,param->Mac_dest, sizeof(newReq->Mac_dest)-1); - newReq->resCb = param->resCb; - newReq->timeout = param->timeout; - newReq->next = NULL; + sendReqList *SendReq = IDM_searchFromSendRequestList(param->Mac_dest); + if(SendReq != NULL) + { + CcspTraceInfo(("%s:%d Resending the same request with request id %d \n",__FUNCTION__, __LINE__,SendReq->reqId)); + payload.reqID = SendReq->reqId; + } + else + { + /* Create request entry */ + sendReqList *newReq = malloc(sizeof(sendReqList)); + if (newReq != NULL) { + memset(newReq, 0, sizeof(sendReqList)); + newReq->reqId = gReqIdCounter++; + strncpy(newReq->Mac_dest,param->Mac_dest, sizeof(newReq->Mac_dest)-1); + newReq->resCb = param->resCb; + newReq->timeout = param->timeout; + newReq->next = NULL; - IDM_addToSendRequestList(newReq); - payload.reqID = newReq->reqId; - } + IDM_addToSendRequestList(newReq); + payload.reqID = newReq->reqId; + } + } }else if(param->operation == IDM_SUBS) { /* Create request entry */ sendSubscriptionList *newReq = malloc(sizeof(sendSubscriptionList)); - if (newReq != NULL) { + if (newReq != NULL) { memset(newReq, 0, sizeof(sendSubscriptionList)); newReq->reqId = gReqIdCounter++; newReq->resCb = param->resCb; newReq->next = NULL; IDM_addToSendSubscriptionuestList(newReq); payload.reqID = newReq->reqId; - } + } } payload.operation = param->operation; @@ -353,8 +381,24 @@ ANSC_STATUS IDM_sendMsg_to_Remote_device(idm_send_msg_Params_t *param) payload.type = param->type; /* send message */ - send_remote_message(&remoteDevice->stRemoteDeviceInfo.conn_info, &payload); + int ret = send_remote_message(&remoteDevice->stRemoteDeviceInfo.conn_info, &payload); usleep(250000); //Sleep for 250ms + if(ret != 0) + { + CcspTraceError(("%s:%d send_remote_message failed for request id %d\n",__FUNCTION__, __LINE__,payload.reqID)); + if(param->operation == GET || param->operation == SET || param->operation == IDM_REQUEST) + { + sendReqList *req; + req = IDM_getFromSendRequestList(payload.reqID); + if(req == NULL) + { + CcspTraceError(("%s:%d Request not found in SendRequestList \n",__FUNCTION__, __LINE__)); + }else{ + CcspTraceInfo(("%s:%d Removing request from SendRequestList \n",__FUNCTION__, __LINE__)); + free(req); + } + } + } }else { IdmMgrDml_GetConfigData_release(pidmDmlInfo); @@ -490,6 +534,7 @@ int IDM_Incoming_Response_handler(payload_t * payload) { rbusMethodAsyncHandle_t async_callBack_handler; rbusError_t ret = RBUS_ERROR_SUCCESS; + CcspTraceInfo(("%s:%d operation - %d req id %d \n",__FUNCTION__, __LINE__,payload->operation, payload->reqID)); /* find req entry in LL */ if(payload->operation == IDM_SUBS) { From c7030e03625a06a2860ef19311fddf8576f618e7 Mon Sep 17 00:00:00 2001 From: Annie Rashmitha Date: Wed, 7 Jan 2026 11:20:06 +0000 Subject: [PATCH 2/8] Adding param name validation to sen request list --- source/InterDeviceManager/Idm_msg_process.c | 16 ++++++++++------ source/InterDeviceManager/Idm_msg_process.h | 1 + 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/source/InterDeviceManager/Idm_msg_process.c b/source/InterDeviceManager/Idm_msg_process.c index 59c9ec4..ce4f0f3 100644 --- a/source/InterDeviceManager/Idm_msg_process.c +++ b/source/InterDeviceManager/Idm_msg_process.c @@ -109,7 +109,7 @@ sendReqList* IDM_getFromSendRequestList(uint reqID) } } -sendReqList* IDM_searchFromSendRequestList(const char *param_mac) +sendReqList* IDM_searchFromSendRequestList(const char *param_mac, const char *param_name) { if(param_mac == NULL) @@ -122,9 +122,12 @@ sendReqList* IDM_searchFromSendRequestList(const char *param_mac) { if (strncmp(cur->Mac_dest, param_mac, sizeof(cur->Mac_dest) - 1) == 0) { - return cur; - } - cur = cur->next; + if (strncmp(cur->param_name, param_name, sizeof(cur->param_name) -1) == 0) + { + return cur; + } + } + cur = cur->next; } return NULL; } @@ -275,6 +278,7 @@ ANSC_STATUS IDM_getFile_from_Remote_device(char* Mac_dest,char* filename,char* o strncpy(payload.param_name,filename,sizeof(payload.param_name)-1); strncpy(newReq->output_location,output_location,sizeof(newReq->output_location)-1); payload.reqID = newReq->reqId; + strncpy(newReq->param_name, payload.param_name, sizeof(newReq->param_name)-1); IDM_addToSendRequestList(newReq); CcspTraceDebug(("Inside %s:%d peer MAC=%s\n",__FUNCTION__,__LINE__,Mac_dest)); send_remote_message(&remoteDevice->stRemoteDeviceInfo.conn_info, &payload); @@ -337,7 +341,7 @@ ANSC_STATUS IDM_sendMsg_to_Remote_device(idm_send_msg_Params_t *param) memset(&payload, 0, sizeof(payload_t)); if(param->operation == GET || param->operation == SET || param->operation == IDM_REQUEST) { - sendReqList *SendReq = IDM_searchFromSendRequestList(param->Mac_dest); + sendReqList *SendReq = IDM_searchFromSendRequestList(param->Mac_dest, param->param_name); if(SendReq != NULL) { CcspTraceInfo(("%s:%d Resending the same request with request id %d \n",__FUNCTION__, __LINE__,SendReq->reqId)); @@ -354,7 +358,7 @@ ANSC_STATUS IDM_sendMsg_to_Remote_device(idm_send_msg_Params_t *param) newReq->resCb = param->resCb; newReq->timeout = param->timeout; newReq->next = NULL; - + strncpy(newReq->param_name, param->param_name, sizeof(newReq->param_name)-1); IDM_addToSendRequestList(newReq); payload.reqID = newReq->reqId; } diff --git a/source/InterDeviceManager/Idm_msg_process.h b/source/InterDeviceManager/Idm_msg_process.h index bc99503..9da96bc 100644 --- a/source/InterDeviceManager/Idm_msg_process.h +++ b/source/InterDeviceManager/Idm_msg_process.h @@ -28,6 +28,7 @@ typedef struct _sendReqList uint reqId; char Mac_dest[MAC_ADDR_SIZE]; rbusMethodAsyncHandle_t resCb; + char param_name[128]; uint timeout; char output_location[LOC_SIZE]; struct _sendReqList *next; From 2f55efc33c301d2fb4c5115e526d080997127da8 Mon Sep 17 00:00:00 2001 From: Annie Rashmitha Date: Thu, 11 Jun 2026 10:06:18 +0000 Subject: [PATCH 3/8] Fix to prevent SSL_write crash --- source/InterDeviceManager/Idm_TCP_apis.c | 127 ++++++++++++++++---- source/InterDeviceManager/Idm_TCP_apis.h | 4 + source/InterDeviceManager/Idm_msg_process.c | 18 +-- 3 files changed, 118 insertions(+), 31 deletions(-) diff --git a/source/InterDeviceManager/Idm_TCP_apis.c b/source/InterDeviceManager/Idm_TCP_apis.c index 0522bfb..258d663 100644 --- a/source/InterDeviceManager/Idm_TCP_apis.c +++ b/source/InterDeviceManager/Idm_TCP_apis.c @@ -18,6 +18,7 @@ */ #include #include +#include #include "Idm_TCP_apis.h" #include #include @@ -43,6 +44,7 @@ bool ssl_lib_init = false; bool TCP_server_started = false; bool connect_reset = false; pthread_mutex_t connect_reset_mutex = PTHREAD_MUTEX_INITIALIZER; +static pthread_mutex_t ssl_io_mutex = PTHREAD_MUTEX_INITIALIZER; typedef int (*callback_recv)( connection_info_t* conn_info, void *payload); typedef struct tcp_server_threadargs @@ -52,6 +54,67 @@ typedef struct tcp_server_threadargs char interface[INTF_SIZE]; } TcpServerThreadArgs; +int idm_ssl_write_safe(connection_info_t *conn_info, const void *payload, size_t payload_len) +{ + int val = -1; + + if (conn_info == NULL || payload == NULL) + { + CcspTraceError(("(%s:%d) invalid input, send failed\n", __FUNCTION__, __LINE__)); + return -1; + } + + if (payload_len > INT_MAX) + { + CcspTraceError(("(%s:%d) invalid payload length %zu\n", __FUNCTION__, __LINE__, payload_len)); + return -1; + } + + pthread_mutex_lock(&ssl_io_mutex); + + if (conn_info->conn < 0 || conn_info->enc.ctx == NULL || conn_info->enc.ssl == NULL) + { + CcspTraceError(("(%s:%d) SSL connection is invalid, send failed\n", __FUNCTION__, __LINE__)); + goto done; + } + + { + int ssl_fd = SSL_get_fd(conn_info->enc.ssl); + int so_error = 0; + socklen_t optlen = sizeof(so_error); + + if (!SSL_is_init_finished(conn_info->enc.ssl)) + { + CcspTraceError(("(%s:%d) SSL handshake is not complete, send failed\n", __FUNCTION__, __LINE__)); + goto done; + } + + if (ssl_fd < 0 || ssl_fd != conn_info->conn) + { + CcspTraceError(("(%s:%d) SSL fd mismatch (ssl fd: %d, conn fd: %d), send failed\n", __FUNCTION__, __LINE__, ssl_fd, conn_info->conn)); + goto done; + } + + if (getsockopt(conn_info->conn, SOL_SOCKET, SO_ERROR, &so_error, &optlen) == 0 && so_error != 0) + { + CcspTraceError(("(%s:%d) socket has pending error (%d: %s), send failed\n", __FUNCTION__, __LINE__, so_error, strerror(so_error))); + goto done; + } + } + + val = SSL_write(conn_info->enc.ssl, payload, (int)payload_len); + if (val <= 0) + { + int ssl_err = SSL_get_error(conn_info->enc.ssl, val); + CcspTraceError(("(%s:%d) SSL_write failed (Ret: %d, SSL Error: %d)\n", __FUNCTION__, __LINE__, val, ssl_err)); + val = -1; + } + +done: + pthread_mutex_unlock(&ssl_io_mutex); + return val; +} + SSL_CTX* init_ctx(void) { SSL_CTX *ctx = NULL; @@ -613,7 +676,7 @@ char* getFile_to_remote(connection_info_t* conn_info,void *payload) CcspTraceError(("%s:%d file not present\n",__FUNCTION__,__LINE__)); strncpy_s(Data->param_value,sizeof(Data->param_value),FT_INVALID_FILE_NAME,strlen(FT_INVALID_FILE_NAME)); #ifndef IDM_DEBUG - if ((bytes = SSL_write(conn_info->enc.ssl, Data, sizeof(payload_t))) > 0) + if ((bytes = idm_ssl_write_safe(conn_info, Data, sizeof(payload_t))) > 0) { CcspTraceError(("%s:%d invalid file name information is sent to peer device\n",__FUNCTION__,__LINE__)); } @@ -641,7 +704,7 @@ char* getFile_to_remote(connection_info_t* conn_info,void *payload) fclose(fptr); strncpy_s(Data->param_value,sizeof(Data->param_value),FT_FILE_SIZE_EXCEED,strlen(FT_FILE_SIZE_EXCEED)); #ifndef IDM_DEBUG - if ((bytes = SSL_write(conn_info->enc.ssl, Data, sizeof(payload_t))) > 0) + if ((bytes = idm_ssl_write_safe(conn_info, Data, sizeof(payload_t))) > 0) { CcspTraceError(("%s:%d file size is more than the configured value and information is sent to peer device\n",__FUNCTION__,__LINE__)); } @@ -663,13 +726,19 @@ char* getFile_to_remote(connection_info_t* conn_info,void *payload) sprintf(buffer,"%zu",length); strncpy_s(Data->param_value,sizeof(Data->param_value),buffer,strlen(buffer)); #ifndef IDM_DEBUG + if (conn_info->conn < 0) { + CcspTraceError(("(%s:%d) Invalid socket fd, Data send failed\n", __FUNCTION__, __LINE__)); + free(buffer); + fclose(fptr); + return FT_ERROR; + } if(conn_info->enc.ssl == NULL){ CcspTraceError(("(%s:%d) SSL CTX is NULL, Data send failed\n", __FUNCTION__, __LINE__)); free(buffer); fclose(fptr); return FT_ERROR; } - if ((bytes = SSL_write(conn_info->enc.ssl, Data, sizeof(payload_t))) > 0) + if ((bytes = idm_ssl_write_safe(conn_info, Data, sizeof(payload_t))) > 0) { free(buffer); buffer =(char*)malloc (length); @@ -681,7 +750,7 @@ char* getFile_to_remote(connection_info_t* conn_info,void *payload) fclose(fptr); return FT_ERROR; } - if((bytes = SSL_write(conn_info->enc.ssl, buffer,length)) <= 0) + if((bytes = idm_ssl_write_safe(conn_info, buffer, length)) <= 0) { CcspTraceError(("file data is not transformed\n")); } @@ -817,10 +886,10 @@ char* sendFile_to_remote(connection_info_t* conn_info,void *payload,char* output free(buffer); return FT_ERROR; } - if ((bytes = SSL_write(conn_info->enc.ssl, Data, sizeof(payload_t))) > 0) + if ((bytes = idm_ssl_write_safe(conn_info, Data, sizeof(payload_t))) > 0) { // above ssl write transfers the information about file length and output file location whereas below one sends the file content - if((bytes = SSL_write(conn_info->enc.ssl, buffer,length)) <= 0) + if((bytes = idm_ssl_write_safe(conn_info, buffer, length)) <= 0) { CcspTraceError(("file data is not transformed\n")); } @@ -858,22 +927,19 @@ char* sendFile_to_remote(connection_info_t* conn_info,void *payload,char* output int send_remote_message(connection_info_t* conn_info,void *payload) { #ifndef IDM_DEBUG - int val; - if (conn_info->enc.ctx != NULL && conn_info->enc.ssl != NULL) { - val = SSL_write(conn_info->enc.ssl, payload, sizeof(payload_t)); - if (val > 0) { - CcspTraceInfo(("(%s:%d) SSL_write successful connection id %d \n", __FUNCTION__, __LINE__,conn_info->conn)); - return 0; - } - else - { - int ssl_err = SSL_get_error(conn_info->enc.ssl, val); - CcspTraceError(("(%s:%d) SSL_write failed (Ret: %d, SSL Error: %d)\n", __FUNCTION__, __LINE__, val, ssl_err)); - } + if (conn_info == NULL || payload == NULL) { + CcspTraceError(("(%s:%d) invalid input, send failed\n", __FUNCTION__, __LINE__)); + return -1; } - else - { - CcspTraceError(("(%s:%d) SSL CTX is NULL, Data send failed\n", __FUNCTION__, __LINE__)); + + if (conn_info->conn < 0) { + CcspTraceError(("(%s:%d) invalid socket fd, send failed\n", __FUNCTION__, __LINE__)); + return -1; + } + + if (idm_ssl_write_safe(conn_info, payload, sizeof(payload_t)) > 0) { + CcspTraceInfo(("(%s:%d) SSL_write successful connection id %d \n", __FUNCTION__, __LINE__, conn_info->conn)); + return 0; } #else if(send(conn_info->conn, payload, sizeof(payload_t), 0)<0) @@ -887,13 +953,30 @@ int send_remote_message(connection_info_t* conn_info,void *payload) int close_remote_connection(connection_info_t* conn_info) { + if (conn_info == NULL) { + return -1; + } + + pthread_mutex_lock(&ssl_io_mutex); + if (conn_info->enc.ssl != NULL) { + SSL_shutdown(conn_info->enc.ssl); SSL_free(conn_info->enc.ssl); + conn_info->enc.ssl = NULL; + } + + if (conn_info->conn >= 0) { + close(conn_info->conn); + conn_info->conn = -1; } - close(conn_info->conn); + if (conn_info->enc.ctx != NULL) { SSL_CTX_free(conn_info->enc.ctx); + conn_info->enc.ctx = NULL; } + + pthread_mutex_unlock(&ssl_io_mutex); + CcspTraceInfo(("%s %d - socket closed\n", __FUNCTION__, __LINE__)); return 1; } diff --git a/source/InterDeviceManager/Idm_TCP_apis.h b/source/InterDeviceManager/Idm_TCP_apis.h index 2f33111..5e85904 100644 --- a/source/InterDeviceManager/Idm_TCP_apis.h +++ b/source/InterDeviceManager/Idm_TCP_apis.h @@ -20,6 +20,8 @@ #ifndef _IDM_TCP_H_ #define _IDM_TCP_H_ +#include + #include "Idm_rbus.h" #include "Idm_msg_process.h" @@ -30,5 +32,7 @@ int open_remote_connection(connection_config_t* connectionConf, int (*connection int send_remote_message(connection_info_t* conn_info, void *payload); +int idm_ssl_write_safe(connection_info_t* conn_info, const void *payload, size_t payload_len); + int close_remote_connection(connection_info_t* conn_info); #endif diff --git a/source/InterDeviceManager/Idm_msg_process.c b/source/InterDeviceManager/Idm_msg_process.c index 6cc17c8..cd8086c 100644 --- a/source/InterDeviceManager/Idm_msg_process.c +++ b/source/InterDeviceManager/Idm_msg_process.c @@ -732,7 +732,7 @@ char* IDM_SFT_receive(connection_info_t* conn_info,void* payload) char* buf = NULL; int bytes=0,length=0,total_bytes=0; #ifndef IDM_DEBUG - SSL* ssl= NULL; + connection_info_t *tx_conn = NULL; #else int conn=0; #endif @@ -757,7 +757,7 @@ char* IDM_SFT_receive(connection_info_t* conn_info,void* payload) #ifndef IDM_DEBUG if(remoteDevice->stRemoteDeviceInfo.conn_info.enc.ssl != NULL) { - ssl = remoteDevice->stRemoteDeviceInfo.conn_info.enc.ssl; + tx_conn = &remoteDevice->stRemoteDeviceInfo.conn_info; } #else if(remoteDevice->stRemoteDeviceInfo.conn_info.conn != 0) @@ -774,9 +774,9 @@ char* IDM_SFT_receive(connection_info_t* conn_info,void* payload) strncpy_s(Data->param_value,sizeof(Data->param_value),FT_INVALID_FILE_SIZE,strlen(FT_INVALID_FILE_SIZE)); CcspTraceDebug(("%s:%d Data->operation=%d Data->param_value=%s \n",__FUNCTION__,__LINE__,Data->operation,Data->param_value)); #ifndef IDM_DEBUG - if(ssl != NULL) + if(tx_conn != NULL) { - if(bytes = (SSL_write(ssl,Data,sizeof(payload_t))) <= 0 ) + if((bytes = idm_ssl_write_safe(tx_conn, Data, sizeof(payload_t))) <= 0) #else if(bytes = (send(conn,Data,sizeof(payload_t),0)) <= 0 ) #endif @@ -790,7 +790,7 @@ char* IDM_SFT_receive(connection_info_t* conn_info,void* payload) } else { - CcspTraceError(("%s:%d ssl value is null\n",__FUNCTION__,__LINE__)); + CcspTraceError(("%s:%d ssl connection is null\n",__FUNCTION__,__LINE__)); IdmMgrDml_GetConfigData_release(pidmDmlInfo); return FT_ERROR; } @@ -823,9 +823,9 @@ char* IDM_SFT_receive(connection_info_t* conn_info,void* payload) strncpy_s(Data->param_value,sizeof(Data->param_value),FT_INVALID_DST_PATH,strlen(FT_INVALID_DST_PATH)); CcspTraceDebug(("%s:%d Data->operation=%d Data->param_value%s\n",__FUNCTION__,__LINE__,Data->operation,Data->param_value)); #ifndef IDM_DEBUG - if(ssl != NULL) + if(tx_conn != NULL) { - SSL_write(ssl,Data,sizeof(payload_t)); + idm_ssl_write_safe(tx_conn, Data, sizeof(payload_t)); } #else send(conn,Data,sizeof(payload_t),0); @@ -835,9 +835,9 @@ char* IDM_SFT_receive(connection_info_t* conn_info,void* payload) #ifndef IDM_DEBUG strncpy_s(Data->param_value,sizeof(Data->param_value),FT_NOT_WRITABLE_PATH,strlen(FT_NOT_WRITABLE_PATH)); CcspTraceDebug(("%s:%d Data->operation=%d Data->param_value%s\n",__FUNCTION__,__LINE__,Data->operation,Data->param_value)); - if(ssl != NULL) + if(tx_conn != NULL) { - SSL_write(ssl,Data,sizeof(payload_t)); + idm_ssl_write_safe(tx_conn, Data, sizeof(payload_t)); } #else send(conn,Data,sizeof(payload_t),0); From 6d1835c17272b8dc2f785f8df6288c590ca5b7d6 Mon Sep 17 00:00:00 2001 From: Annie Rashmitha Date: Wed, 17 Jun 2026 14:02:08 +0000 Subject: [PATCH 4/8] Remove duplicate checks --- source/InterDeviceManager/Idm_TCP_apis.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/source/InterDeviceManager/Idm_TCP_apis.c b/source/InterDeviceManager/Idm_TCP_apis.c index 258d663..4b9914b 100644 --- a/source/InterDeviceManager/Idm_TCP_apis.c +++ b/source/InterDeviceManager/Idm_TCP_apis.c @@ -726,11 +726,6 @@ char* getFile_to_remote(connection_info_t* conn_info,void *payload) sprintf(buffer,"%zu",length); strncpy_s(Data->param_value,sizeof(Data->param_value),buffer,strlen(buffer)); #ifndef IDM_DEBUG - if (conn_info->conn < 0) { - CcspTraceError(("(%s:%d) Invalid socket fd, Data send failed\n", __FUNCTION__, __LINE__)); - free(buffer); - fclose(fptr); - return FT_ERROR; } if(conn_info->enc.ssl == NULL){ CcspTraceError(("(%s:%d) SSL CTX is NULL, Data send failed\n", __FUNCTION__, __LINE__)); From 082a6beb4fe1b87a5600e3b94cc5ed0a44370498 Mon Sep 17 00:00:00 2001 From: Annie Rashmitha Date: Wed, 17 Jun 2026 15:15:44 +0000 Subject: [PATCH 5/8] Fix compilation issue --- source/InterDeviceManager/Idm_TCP_apis.c | 51 +++++++----------------- 1 file changed, 14 insertions(+), 37 deletions(-) diff --git a/source/InterDeviceManager/Idm_TCP_apis.c b/source/InterDeviceManager/Idm_TCP_apis.c index 4b9914b..d718977 100644 --- a/source/InterDeviceManager/Idm_TCP_apis.c +++ b/source/InterDeviceManager/Idm_TCP_apis.c @@ -18,7 +18,6 @@ */ #include #include -#include #include "Idm_TCP_apis.h" #include #include @@ -64,12 +63,6 @@ int idm_ssl_write_safe(connection_info_t *conn_info, const void *payload, size_t return -1; } - if (payload_len > INT_MAX) - { - CcspTraceError(("(%s:%d) invalid payload length %zu\n", __FUNCTION__, __LINE__, payload_len)); - return -1; - } - pthread_mutex_lock(&ssl_io_mutex); if (conn_info->conn < 0 || conn_info->enc.ctx == NULL || conn_info->enc.ssl == NULL) @@ -78,28 +71,20 @@ int idm_ssl_write_safe(connection_info_t *conn_info, const void *payload, size_t goto done; } - { - int ssl_fd = SSL_get_fd(conn_info->enc.ssl); - int so_error = 0; - socklen_t optlen = sizeof(so_error); - - if (!SSL_is_init_finished(conn_info->enc.ssl)) - { - CcspTraceError(("(%s:%d) SSL handshake is not complete, send failed\n", __FUNCTION__, __LINE__)); - goto done; - } + int ssl_fd = SSL_get_fd(conn_info->enc.ssl); + int so_error = 0; + socklen_t optlen = sizeof(so_error); - if (ssl_fd < 0 || ssl_fd != conn_info->conn) - { - CcspTraceError(("(%s:%d) SSL fd mismatch (ssl fd: %d, conn fd: %d), send failed\n", __FUNCTION__, __LINE__, ssl_fd, conn_info->conn)); - goto done; - } + if (ssl_fd < 0 || ssl_fd != conn_info->conn) + { + CcspTraceError(("(%s:%d) SSL fd mismatch (ssl fd: %d, conn fd: %d), send failed\n", __FUNCTION__, __LINE__, ssl_fd, conn_info->conn)); + goto done; + } - if (getsockopt(conn_info->conn, SOL_SOCKET, SO_ERROR, &so_error, &optlen) == 0 && so_error != 0) - { - CcspTraceError(("(%s:%d) socket has pending error (%d: %s), send failed\n", __FUNCTION__, __LINE__, so_error, strerror(so_error))); - goto done; - } + if (!SSL_is_init_finished(conn_info->enc.ssl)) + { + CcspTraceError(("(%s:%d) SSL handshake is not complete, send failed\n", __FUNCTION__, __LINE__)); + goto done; } val = SSL_write(conn_info->enc.ssl, payload, (int)payload_len); @@ -109,6 +94,7 @@ int idm_ssl_write_safe(connection_info_t *conn_info, const void *payload, size_t CcspTraceError(("(%s:%d) SSL_write failed (Ret: %d, SSL Error: %d)\n", __FUNCTION__, __LINE__, val, ssl_err)); val = -1; } + CcspTraceInfo(("(%s:%d) SSL_write successful connection id %d \n", __FUNCTION__, __LINE__,conn_info->conn)); done: pthread_mutex_unlock(&ssl_io_mutex); @@ -726,7 +712,6 @@ char* getFile_to_remote(connection_info_t* conn_info,void *payload) sprintf(buffer,"%zu",length); strncpy_s(Data->param_value,sizeof(Data->param_value),buffer,strlen(buffer)); #ifndef IDM_DEBUG - } if(conn_info->enc.ssl == NULL){ CcspTraceError(("(%s:%d) SSL CTX is NULL, Data send failed\n", __FUNCTION__, __LINE__)); free(buffer); @@ -922,15 +907,6 @@ char* sendFile_to_remote(connection_info_t* conn_info,void *payload,char* output int send_remote_message(connection_info_t* conn_info,void *payload) { #ifndef IDM_DEBUG - if (conn_info == NULL || payload == NULL) { - CcspTraceError(("(%s:%d) invalid input, send failed\n", __FUNCTION__, __LINE__)); - return -1; - } - - if (conn_info->conn < 0) { - CcspTraceError(("(%s:%d) invalid socket fd, send failed\n", __FUNCTION__, __LINE__)); - return -1; - } if (idm_ssl_write_safe(conn_info, payload, sizeof(payload_t)) > 0) { CcspTraceInfo(("(%s:%d) SSL_write successful connection id %d \n", __FUNCTION__, __LINE__, conn_info->conn)); @@ -943,6 +919,7 @@ int send_remote_message(connection_info_t* conn_info,void *payload) return -1; } #endif + CcspTraceInfo(("(%s:%d) SSL_write failed \n", __FUNCTION__, __LINE__)); return -1; } From a43ac79a9c03c150540ccc10e4b5b55d5d64a186 Mon Sep 17 00:00:00 2001 From: Annie Rashmitha Date: Tue, 29 Sep 2026 14:04:43 +0000 Subject: [PATCH 6/8] Fix review comments --- source/InterDeviceManager/Idm_TCP_apis.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/source/InterDeviceManager/Idm_TCP_apis.c b/source/InterDeviceManager/Idm_TCP_apis.c index d718977..2efef4d 100644 --- a/source/InterDeviceManager/Idm_TCP_apis.c +++ b/source/InterDeviceManager/Idm_TCP_apis.c @@ -72,8 +72,6 @@ int idm_ssl_write_safe(connection_info_t *conn_info, const void *payload, size_t } int ssl_fd = SSL_get_fd(conn_info->enc.ssl); - int so_error = 0; - socklen_t optlen = sizeof(so_error); if (ssl_fd < 0 || ssl_fd != conn_info->conn) { @@ -94,7 +92,10 @@ int idm_ssl_write_safe(connection_info_t *conn_info, const void *payload, size_t CcspTraceError(("(%s:%d) SSL_write failed (Ret: %d, SSL Error: %d)\n", __FUNCTION__, __LINE__, val, ssl_err)); val = -1; } - CcspTraceInfo(("(%s:%d) SSL_write successful connection id %d \n", __FUNCTION__, __LINE__,conn_info->conn)); + else + { + CcspTraceInfo(("(%s:%d) SSL_write successful connection id %d \n", __FUNCTION__, __LINE__,conn_info->conn)); + } done: pthread_mutex_unlock(&ssl_io_mutex); From c0a8cdfbf1a181ceb9eeac4b865c9058e14a190e Mon Sep 17 00:00:00 2001 From: Annie Rashmitha Date: Thu, 1 Oct 2026 09:45:51 +0000 Subject: [PATCH 7/8] Addressed copilot review --- source/InterDeviceManager/Idm_TCP_apis.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/source/InterDeviceManager/Idm_TCP_apis.c b/source/InterDeviceManager/Idm_TCP_apis.c index 2efef4d..eb58014 100644 --- a/source/InterDeviceManager/Idm_TCP_apis.c +++ b/source/InterDeviceManager/Idm_TCP_apis.c @@ -913,15 +913,23 @@ int send_remote_message(connection_info_t* conn_info,void *payload) CcspTraceInfo(("(%s:%d) SSL_write successful connection id %d \n", __FUNCTION__, __LINE__, conn_info->conn)); return 0; } + else + { + CcspTraceInfo(("(%s:%d) SSL_write failed \n", __FUNCTION__, __LINE__)); + return -1; + } #else if(send(conn_info->conn, payload, sizeof(payload_t), 0)<0) { CcspTraceError(("%s %d - send failed failed : %s\n", __FUNCTION__, __LINE__, strerror(errno))); return -1; } + else + { + CcspTraceError(("%s %d - send successful \n", __FUNCTION__, __LINE__)); + return 0; + } #endif - CcspTraceInfo(("(%s:%d) SSL_write failed \n", __FUNCTION__, __LINE__)); - return -1; } int close_remote_connection(connection_info_t* conn_info) From e1c4be08ffd555dbc45d0e2a39bebf155cc21852 Mon Sep 17 00:00:00 2001 From: annie-rashmitha Date: Thu, 1 Oct 2026 10:56:37 +0100 Subject: [PATCH 8/8] Successful debug sends are logged at error severity Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- source/InterDeviceManager/Idm_TCP_apis.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/InterDeviceManager/Idm_TCP_apis.c b/source/InterDeviceManager/Idm_TCP_apis.c index eb58014..3f6232b 100644 --- a/source/InterDeviceManager/Idm_TCP_apis.c +++ b/source/InterDeviceManager/Idm_TCP_apis.c @@ -926,7 +926,7 @@ int send_remote_message(connection_info_t* conn_info,void *payload) } else { - CcspTraceError(("%s %d - send successful \n", __FUNCTION__, __LINE__)); + CcspTraceInfo(("%s %d - send successful \n", __FUNCTION__, __LINE__)); return 0; } #endif