diff --git a/CHANGELOG.md b/CHANGELOG.md index 528cd2f..49e6150 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,11 +4,21 @@ All notable changes to this project will be documented in this file. Dates are d Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). +#### [1.1.2](https://github.com/rdkcentral/advanced-security/compare/1.1.1...1.1.2) + +- RDKB-61956, RDKB-62450 : Fix coverity issues [`#32`](https://github.com/rdkcentral/advanced-security/pull/32) +- Update CODEOWNERS [`#31`](https://github.com/rdkcentral/advanced-security/pull/31) +- Deploy fossid_integration_stateless_diffscan_target_repo action [`#30`](https://github.com/rdkcentral/advanced-security/pull/30) +- Deploy cla action [`#29`](https://github.com/rdkcentral/advanced-security/pull/29) + #### [1.1.1](https://github.com/rdkcentral/advanced-security/compare/1.1.0...1.1.1) +> 25 September 2025 + - RDKBACCL-907: [TDK][AUTO][BPI] CcspAdvSecurity process is not running and Advanced ParentalControland Enable and other parameters are missing [`#20`](https://github.com/rdkcentral/advanced-security/pull/20) - Merge pull request #25 from rdkcentral/develop [`#26`](https://github.com/rdkcentral/advanced-security/pull/26) - RDKB-61523: Merge tag '1.1.0' into develop [`#25`](https://github.com/rdkcentral/advanced-security/pull/25) +- Add CHANGELOG.md for Release 1.1.1 [`56df3d0`](https://github.com/rdkcentral/advanced-security/commit/56df3d05645abe33a4570cdf4d37b436d0abf3e8) #### [1.1.0](https://github.com/rdkcentral/advanced-security/compare/1.0.1...1.1.0) diff --git a/source/AdvSecurityDml/cosa_adv_security_dml.c b/source/AdvSecurityDml/cosa_adv_security_dml.c index b926b80..c8d08ff 100644 --- a/source/AdvSecurityDml/cosa_adv_security_dml.c +++ b/source/AdvSecurityDml/cosa_adv_security_dml.c @@ -33,6 +33,7 @@ #define MAX_RABID_DNSCACHE_SIZE 32768 extern COSA_DATAMODEL_AGENT* g_pAdvSecAgent; +extern pthread_mutex_t logMutex; #ifdef WIFI_DATA_COLLECTION static char *g_AdvWifiDataCollection = "Adv_WifiDataCollectionRFCEnable"; @@ -266,7 +267,9 @@ DeviceFingerPrint_GetParamUlongValue ERR_CHK(rc); if((rc == EOK) && (!ind)) { + pthread_mutex_lock(&logMutex); *puLong = g_pAdvSecAgent->ulLoggingPeriod; + pthread_mutex_unlock(&logMutex); return TRUE; } @@ -344,15 +347,19 @@ DeviceFingerPrint_SetParamUlongValue return FALSE; } - if(bValue == g_pAdvSecAgent->ulLoggingPeriod) - return TRUE; + pthread_mutex_lock(&logMutex); + if(bValue == g_pAdvSecAgent->ulLoggingPeriod) { + pthread_mutex_unlock(&logMutex); + return TRUE; + } + pthread_mutex_unlock(&logMutex); returnStatus = CosaAdvSecSetLoggingPeriod(bValue); if ( returnStatus != ANSC_STATUS_SUCCESS ) { CcspTraceInfo(("%s EXIT Error\n", __FUNCTION__)); - return returnStatus; + return FALSE; } return TRUE; @@ -377,7 +384,7 @@ DeviceFingerPrint_SetParamUlongValue if ( returnStatus != ANSC_STATUS_SUCCESS ) { CcspTraceInfo(("%s EXIT Error\n", __FUNCTION__)); - return returnStatus; + return FALSE; } return TRUE; @@ -524,7 +531,7 @@ DeviceFingerPrint_SetParamStringValue if ( returnStatus != ANSC_STATUS_SUCCESS ) { CcspTraceInfo(("%s EXIT Error\n", __FUNCTION__)); - return returnStatus; + return FALSE; } return TRUE; } @@ -967,7 +974,7 @@ SafeBrowsing_GetParamUlongValue if ( returnStatus != ANSC_STATUS_SUCCESS ) { CcspTraceError(("%s EXIT Error\n", __FUNCTION__)); - return returnStatus; + return FALSE; } return TRUE; diff --git a/source/AdvSecurityDml/cosa_adv_security_internal.c b/source/AdvSecurityDml/cosa_adv_security_internal.c index d24ae25..c9d400d 100644 --- a/source/AdvSecurityDml/cosa_adv_security_internal.c +++ b/source/AdvSecurityDml/cosa_adv_security_internal.c @@ -143,8 +143,9 @@ static char *g_AdvSecCujoTelemetryWiFiFPEnabled = "Adv_AdvSecCujoTelemetryWiFiFP static char *g_AdvSecCujoTracerEnabled = "Adv_AdvSecCujoTracerRFCEnable"; static char *g_AdvSecCujoTelemetryEnabled = "Adv_AdvSecCujoTelemetryRFCEnable"; -static pthread_mutex_t logMutex = PTHREAD_MUTEX_INITIALIZER; +pthread_mutex_t logMutex = PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t logCond = PTHREAD_COND_INITIALIZER; +static BOOL logReady = FALSE; static char prevWanIfname[MAX_INTERFACE_SIZE] = {0}; void advsec_handle_sysevent_async(void); @@ -308,8 +309,14 @@ static BOOL advsec_read_from_file(char *fpath, char *str, int size) CcspTraceDebug(("%s: size: %d\n", __FUNCTION__, size)); /* CID 162508: Calling risky function */ char format[20] = {'\0'}; + int count = 0; errno_t rc = -1; - snprintf(format,sizeof(format),"%%%ds", size-1); + count = snprintf(format,sizeof(format),"%%%ds", size-1); + if (count < 0 || count >= (int)sizeof(format)) { + CcspTraceError(("snprintf failed or output is truncated\n")); + fclose(file); + return 0; + } /* CID 162506: Unchecked return value from library */ rc = fscanf(file, format, str); ERR_CHK(rc); @@ -733,11 +740,103 @@ ANSC_STATUS CosaAdvSecFetchSbConfig(char* paramName, char* pValue, ULONG* pUlSiz else { CcspTraceWarning(("SAFEBRO_CONFIG_FILE_PATH %s is empty\n", SAFEBRO_CONFIG_FILE_PATH)); + free(data); + data = NULL; return ANSC_STATUS_FAILURE; } return ANSC_STATUS_SUCCESS; } +VOID FreeCosaDmAgent(PCOSA_DATAMODEL_AGENT pMyObject) +{ + if (pMyObject) + { + if (pMyObject->pAdvSec) + { + if (pMyObject->pAdvSec->pSafeBrows) { + AnscFreeMemory((ANSC_HANDLE)pMyObject->pAdvSec->pSafeBrows); + pMyObject->pAdvSec->pSafeBrows = NULL; + } + if (pMyObject->pAdvSec->pSoftFlowd) { + AnscFreeMemory((ANSC_HANDLE)pMyObject->pAdvSec->pSoftFlowd); + pMyObject->pAdvSec->pSoftFlowd = NULL; + } + AnscFreeMemory((ANSC_HANDLE)pMyObject->pAdvSec); + pMyObject->pAdvSec = NULL; + } + if (pMyObject->pAdvPC) { + AnscFreeMemory((ANSC_HANDLE)pMyObject->pAdvPC); + pMyObject->pAdvPC = NULL; + } + if (pMyObject->pPrivProt) { + AnscFreeMemory((ANSC_HANDLE)pMyObject->pPrivProt); + pMyObject->pPrivProt = NULL; + } + if (pMyObject->pRabid) { + AnscFreeMemory((ANSC_HANDLE)pMyObject->pRabid); + pMyObject->pRabid = NULL; + } + if (pMyObject->pAdvPC_RFC) { + AnscFreeMemory((ANSC_HANDLE)pMyObject->pAdvPC_RFC); + pMyObject->pAdvPC_RFC = NULL; + } + if (pMyObject->pPrivProt_RFC) { + AnscFreeMemory((ANSC_HANDLE)pMyObject->pPrivProt_RFC); + pMyObject->pPrivProt_RFC = NULL; + } + if (pMyObject->pDFIcmpv6_RFC) { + AnscFreeMemory((ANSC_HANDLE)pMyObject->pDFIcmpv6_RFC); + pMyObject->pDFIcmpv6_RFC = NULL; + } + if (pMyObject->pWSDiscoveryAnalysis_RFC) { + AnscFreeMemory((ANSC_HANDLE)pMyObject->pWSDiscoveryAnalysis_RFC); + pMyObject->pWSDiscoveryAnalysis_RFC = NULL; + } + if (pMyObject->pAdvSecOTM_RFC) { + AnscFreeMemory((ANSC_HANDLE)pMyObject->pAdvSecOTM_RFC); + pMyObject->pAdvSecOTM_RFC = NULL; + } + if (pMyObject->pAdvSecUserSpace_RFC) { + AnscFreeMemory((ANSC_HANDLE)pMyObject->pAdvSecUserSpace_RFC); + pMyObject->pAdvSecUserSpace_RFC = NULL; + } + if (pMyObject->pLevl_RFC) { + AnscFreeMemory((ANSC_HANDLE)pMyObject->pLevl_RFC); + pMyObject->pLevl_RFC = NULL; + } + if (pMyObject->pAdvSecAgent_RFC) { + AnscFreeMemory((ANSC_HANDLE)pMyObject->pAdvSecAgent_RFC); + pMyObject->pAdvSecAgent_RFC = NULL; + } + if (pMyObject->pAdvSecSafeBrowsing_RFC) { + AnscFreeMemory((ANSC_HANDLE)pMyObject->pAdvSecSafeBrowsing_RFC); + pMyObject->pAdvSecSafeBrowsing_RFC = NULL; + } + if (pMyObject->pAdvSecCujoTelemetryWiFiFP_RFC) { + AnscFreeMemory((ANSC_HANDLE)pMyObject->pAdvSecCujoTelemetryWiFiFP_RFC); + pMyObject->pAdvSecCujoTelemetryWiFiFP_RFC = NULL; + } + if (pMyObject->pAdvSecCujoTracer_RFC) { + AnscFreeMemory((ANSC_HANDLE)pMyObject->pAdvSecCujoTracer_RFC); + pMyObject->pAdvSecCujoTracer_RFC = NULL; + } + if (pMyObject->pAdvSecCujoTelemetry_RFC) { + AnscFreeMemory((ANSC_HANDLE)pMyObject->pAdvSecCujoTelemetry_RFC); + pMyObject->pAdvSecCujoTelemetry_RFC = NULL; + } + if (pMyObject->pAdvWifiDataCollection_RFC) { + AnscFreeMemory((ANSC_HANDLE)pMyObject->pAdvWifiDataCollection_RFC); + pMyObject->pAdvWifiDataCollection_RFC = NULL; + } + if (pMyObject->pRaptr_RFC) { + AnscFreeMemory((ANSC_HANDLE)pMyObject->pRaptr_RFC); + pMyObject->pRaptr_RFC = NULL; + } + AnscFreeMemory((ANSC_HANDLE)pMyObject); + pMyObject = NULL; + } +} + ANSC_HANDLE CosaSecurityCreate ( @@ -751,196 +850,147 @@ CosaSecurityCreate * We create object by first allocating memory for holding the variables and member functions. */ pMyObject = (PCOSA_DATAMODEL_AGENT)AnscAllocateMemory(sizeof(COSA_DATAMODEL_AGENT)); - if ( !pMyObject ) { - CcspTraceError(("%s exit ERROR \n", __FUNCTION__)); - return (ANSC_HANDLE)NULL; + goto mem_alloc_failure; } pMyObject->pAdvSec = (PCOSA_DATAMODEL_ADVSEC)AnscAllocateMemory(sizeof(COSA_DATAMODEL_ADVSEC)); - if ( !pMyObject->pAdvSec ) { - CcspTraceError(("%s exit ERROR \n", __FUNCTION__)); - AnscFreeMemory((ANSC_HANDLE)pMyObject); - return (ANSC_HANDLE)NULL; + goto mem_alloc_failure; } pMyObject->pAdvSec->pSafeBrows = (PCOSA_DATAMODEL_SB)AnscAllocateMemory(sizeof(COSA_DATAMODEL_SB)); - if ( !pMyObject->pAdvSec->pSafeBrows ) { - CcspTraceError(("%s exit ERROR \n", __FUNCTION__)); - AnscFreeMemory((ANSC_HANDLE)pMyObject); - return (ANSC_HANDLE)NULL; + goto mem_alloc_failure; } pMyObject->pAdvSec->pSoftFlowd = (PCOSA_DATAMODEL_SOFTFLOWD)AnscAllocateMemory(sizeof(COSA_DATAMODEL_SOFTFLOWD)); if ( !pMyObject->pAdvSec->pSoftFlowd ) { - CcspTraceError(("%s exit ERROR \n", __FUNCTION__)); - AnscFreeMemory((ANSC_HANDLE)pMyObject); - return (ANSC_HANDLE)NULL; + goto mem_alloc_failure; } pMyObject->pAdvPC = (PCOSA_DATAMODEL_ADVPARENTALCONTROL)AnscAllocateMemory(sizeof(COSA_DATAMODEL_ADVPARENTALCONTROL)); if ( !pMyObject->pAdvPC ) { - CcspTraceError(("%s exit ERROR \n", __FUNCTION__)); - AnscFreeMemory((ANSC_HANDLE)pMyObject); - return (ANSC_HANDLE)NULL; + goto mem_alloc_failure; } pMyObject->pPrivProt = (PCOSA_DATAMODEL_PRIVACYPROTECTION)AnscAllocateMemory(sizeof(COSA_DATAMODEL_PRIVACYPROTECTION)); if ( !pMyObject->pPrivProt ) { - CcspTraceError(("%s exit ERROR \n", __FUNCTION__)); - AnscFreeMemory((ANSC_HANDLE)pMyObject); - return (ANSC_HANDLE)NULL; + goto mem_alloc_failure; } pMyObject->pRabid = (PCOSA_DATAMODEL_RABID)AnscAllocateMemory(sizeof(COSA_DATAMODEL_RABID)); if ( !pMyObject->pRabid ) { - CcspTraceInfo(("%s exit ERROR \n", __FUNCTION__)); - AnscFreeMemory((ANSC_HANDLE)pMyObject); - return (ANSC_HANDLE)NULL; + goto mem_alloc_failure; } pMyObject->pAdvPC_RFC = (PCOSA_DATAMODEL_ADVPC_RFC)AnscAllocateMemory(sizeof(COSA_DATAMODEL_ADVPC_RFC)); - if ( !pMyObject->pAdvPC_RFC ) { - CcspTraceInfo(("%s exit ERROR \n", __FUNCTION__)); - AnscFreeMemory((ANSC_HANDLE)pMyObject); - return (ANSC_HANDLE)NULL; + goto mem_alloc_failure; } pMyObject->pPrivProt_RFC = (PCOSA_DATAMODEL_PRIVACYPROTECTION_RFC)AnscAllocateMemory(sizeof(COSA_DATAMODEL_PRIVACYPROTECTION_RFC)); - if ( !pMyObject->pPrivProt_RFC ) { - CcspTraceInfo(("%s exit ERROR \n", __FUNCTION__)); - AnscFreeMemory((ANSC_HANDLE)pMyObject); - return (ANSC_HANDLE)NULL; + goto mem_alloc_failure; } - pMyObject->pDFIcmpv6_RFC = (PCOSA_DATAMODEL_DEVICEFINGERPRINTICMPv6_RFC)AnscAllocateMemory(sizeof(COSA_DATAMODEL_DEVICEFINGERPRINTICMPv6_RFC)); - + pMyObject->pDFIcmpv6_RFC = (PCOSA_DATAMODEL_DEVICEFINGERPRINTICMPv6_RFC) + AnscAllocateMemory(sizeof(COSA_DATAMODEL_DEVICEFINGERPRINTICMPv6_RFC)); if ( !pMyObject->pDFIcmpv6_RFC ) { - CcspTraceInfo(("%s exit ERROR \n", __FUNCTION__)); - AnscFreeMemory((ANSC_HANDLE)pMyObject); - return (ANSC_HANDLE)NULL; + goto mem_alloc_failure; } - pMyObject->pWSDiscoveryAnalysis_RFC = (PCOSA_DATAMODEL_WSDISCOVERYANALYSIS_RFC)AnscAllocateMemory(sizeof(COSA_DATAMODEL_WSDISCOVERYANALYSIS_RFC)); - + pMyObject->pWSDiscoveryAnalysis_RFC = (PCOSA_DATAMODEL_WSDISCOVERYANALYSIS_RFC) + AnscAllocateMemory(sizeof(COSA_DATAMODEL_WSDISCOVERYANALYSIS_RFC)); if ( !pMyObject->pWSDiscoveryAnalysis_RFC ) { - CcspTraceInfo(("%s exit ERROR \n", __FUNCTION__)); - AnscFreeMemory((ANSC_HANDLE)pMyObject); - return (ANSC_HANDLE)NULL; + goto mem_alloc_failure; } pMyObject->pAdvSecOTM_RFC = (PCOSA_DATAMODEL_ADVSECOTM_RFC)AnscAllocateMemory(sizeof(COSA_DATAMODEL_ADVSECOTM_RFC)); - if ( !pMyObject->pAdvSecOTM_RFC ) { - CcspTraceInfo(("%s exit ERROR \n", __FUNCTION__)); - AnscFreeMemory((ANSC_HANDLE)pMyObject); - return (ANSC_HANDLE)NULL; + goto mem_alloc_failure; } pMyObject->pAdvSecUserSpace_RFC = (PCOSA_DATAMODEL_ADVSECUSERSPACE_RFC)AnscAllocateMemory(sizeof(COSA_DATAMODEL_ADVSECUSERSPACE_RFC)); - if ( !pMyObject->pAdvSecUserSpace_RFC ) { - CcspTraceInfo(("%s exit ERROR \n", __FUNCTION__)); - AnscFreeMemory((ANSC_HANDLE)pMyObject); - return (ANSC_HANDLE)NULL; + goto mem_alloc_failure; } pMyObject->pLevl_RFC = (PCOSA_DATAMODEL_LEVL_RFC)AnscAllocateMemory(sizeof(COSA_DATAMODEL_LEVL_RFC)); - if ( !pMyObject->pLevl_RFC ) { - CcspTraceError(("%s exit ERROR \n", __FUNCTION__)); - AnscFreeMemory((ANSC_HANDLE)pMyObject); - return (ANSC_HANDLE)NULL; + goto mem_alloc_failure; } pMyObject->pAdvSecAgent_RFC = (PCOSA_DATAMODEL_ADVSECAGENT_RFC)AnscAllocateMemory(sizeof(COSA_DATAMODEL_ADVSECAGENT_RFC)); - if ( !pMyObject->pAdvSecAgent_RFC ) { - CcspTraceInfo(("%s exit ERROR \n", __FUNCTION__)); - AnscFreeMemory((ANSC_HANDLE)pMyObject); - return (ANSC_HANDLE)NULL; + goto mem_alloc_failure; } - pMyObject->pAdvSecSafeBrowsing_RFC = (PCOSA_DATAMODEL_ADVSECSAFEBROWSING_RFC)AnscAllocateMemory(sizeof(COSA_DATAMODEL_ADVSECSAFEBROWSING_RFC)); - + pMyObject->pAdvSecSafeBrowsing_RFC = (PCOSA_DATAMODEL_ADVSECSAFEBROWSING_RFC) + AnscAllocateMemory(sizeof(COSA_DATAMODEL_ADVSECSAFEBROWSING_RFC)); if ( !pMyObject->pAdvSecSafeBrowsing_RFC ) { - CcspTraceInfo(("%s exit ERROR \n", __FUNCTION__)); - AnscFreeMemory((ANSC_HANDLE)pMyObject); - return (ANSC_HANDLE)NULL; + goto mem_alloc_failure; } - pMyObject->pAdvSecCujoTelemetryWiFiFP_RFC = (PCOSA_DATAMODEL_ADVSECCUJOTELEMETRYWIFIFP_RFC)AnscAllocateMemory(sizeof(COSA_DATAMODEL_ADVSECCUJOTELEMETRYWIFIFP_RFC)); - + pMyObject->pAdvSecCujoTelemetryWiFiFP_RFC = (PCOSA_DATAMODEL_ADVSECCUJOTELEMETRYWIFIFP_RFC) + AnscAllocateMemory(sizeof(COSA_DATAMODEL_ADVSECCUJOTELEMETRYWIFIFP_RFC)); if ( !pMyObject->pAdvSecCujoTelemetryWiFiFP_RFC ) { - CcspTraceInfo(("%s exit ERROR \n", __FUNCTION__)); - AnscFreeMemory((ANSC_HANDLE)pMyObject); - return (ANSC_HANDLE)NULL; + goto mem_alloc_failure; } pMyObject->pAdvSecCujoTracer_RFC = (PCOSA_DATAMODEL_ADVSECCUJOTRACER_RFC)AnscAllocateMemory(sizeof(COSA_DATAMODEL_ADVSECCUJOTRACER_RFC)); - if ( !pMyObject->pAdvSecCujoTracer_RFC ) { - CcspTraceInfo(("%s exit ERROR \n", __FUNCTION__)); - AnscFreeMemory((ANSC_HANDLE)pMyObject); - return (ANSC_HANDLE)NULL; + goto mem_alloc_failure; } - pMyObject->pAdvSecCujoTelemetry_RFC = (PCOSA_DATAMODEL_ADVSECCUJOTELEMETRY_RFC)AnscAllocateMemory(sizeof(COSA_DATAMODEL_ADVSECCUJOTELEMETRY_RFC)); - + pMyObject->pAdvSecCujoTelemetry_RFC = (PCOSA_DATAMODEL_ADVSECCUJOTELEMETRY_RFC) + AnscAllocateMemory(sizeof(COSA_DATAMODEL_ADVSECCUJOTELEMETRY_RFC)); if ( !pMyObject->pAdvSecCujoTelemetry_RFC ) { - CcspTraceInfo(("%s exit ERROR \n", __FUNCTION__)); - AnscFreeMemory((ANSC_HANDLE)pMyObject); - return (ANSC_HANDLE)NULL; + goto mem_alloc_failure; } - pMyObject->pAdvWifiDataCollection_RFC = (PCOSA_DATAMODEL_ADVSECWIFIDATACOLLECTION_RFC)AnscAllocateMemory(sizeof(COSA_DATAMODEL_ADVSECWIFIDATACOLLECTION_RFC)); - + pMyObject->pAdvWifiDataCollection_RFC = (PCOSA_DATAMODEL_ADVSECWIFIDATACOLLECTION_RFC) + AnscAllocateMemory(sizeof(COSA_DATAMODEL_ADVSECWIFIDATACOLLECTION_RFC)); if ( !pMyObject->pAdvWifiDataCollection_RFC ) { - CcspTraceInfo(("%s exit ERROR \n", __FUNCTION__)); - AnscFreeMemory((ANSC_HANDLE)pMyObject); - return (ANSC_HANDLE)NULL; + goto mem_alloc_failure; } pMyObject->pRaptr_RFC = (PCOSA_DATAMODEL_RAPTR_RFC)AnscAllocateMemory(sizeof(COSA_DATAMODEL_RAPTR_RFC)); - if ( !pMyObject->pRaptr_RFC ) { - CcspTraceInfo(("%s exit ERROR \n", __FUNCTION__)); - AnscFreeMemory((ANSC_HANDLE)pMyObject); - return (ANSC_HANDLE)NULL; + goto mem_alloc_failure; } if (syscfg_init() != 0) { CcspTraceError(("%s: syscfg_init error", __FUNCTION__)); - AnscFreeMemory((ANSC_HANDLE)pMyObject); - return (ANSC_HANDLE)NULL; } return (ANSC_HANDLE)pMyObject; + +mem_alloc_failure: + CcspTraceError(("%s exit ERROR \n", __FUNCTION__)); + FreeCosaDmAgent(pMyObject); + return (ANSC_HANDLE)NULL; } @@ -1334,7 +1384,7 @@ CosaSecurityRemove PCOSA_DATAMODEL_AGENT pMyObject = (PCOSA_DATAMODEL_AGENT)hThisObject; /* Remove self */ - AnscFreeMemory((ANSC_HANDLE)pMyObject); + FreeCosaDmAgent(pMyObject); rbus_close(rbus_handle); CcspTraceInfo(("%s EXIT \n", __FUNCTION__)); @@ -1579,7 +1629,9 @@ static void *advsec_logger_th(void *arg) UNREFERENCED_PARAMETER(arg); ULONG remaining_time; int ret = 0; + pthread_mutex_lock(&logMutex); remaining_time = g_pAdvSecAgent->ulLoggingPeriod; + pthread_mutex_unlock(&logMutex); while(1) { if ( WaitForLoggerTimeout(60 * ADVSEC_MIN_LOG_TIMEOUT) ) @@ -1594,13 +1646,17 @@ static void *advsec_logger_th(void *arg) } else { + pthread_mutex_lock(&logMutex); remaining_time = g_pAdvSecAgent->ulLoggingPeriod; + pthread_mutex_unlock(&logMutex); } } if ( remaining_time == 0 ) { + pthread_mutex_lock(&logMutex); remaining_time = g_pAdvSecAgent->ulLoggingPeriod; + pthread_mutex_unlock(&logMutex); } ret = v_secure_system(TEMP_DOWNLOAD_LOCATION"/usr/ccsp/advsec/advsec_log_fp_status.sh check_status &"); @@ -1617,7 +1673,9 @@ static void *advsec_logger_th(void *arg) } else { + pthread_mutex_lock(&logMutex); remaining_time = g_pAdvSecAgent->ulLoggingPeriod; + pthread_mutex_unlock(&logMutex); } } return NULL; @@ -2069,6 +2127,7 @@ ANSC_STATUS CosaAdvSecSetLoggingPeriod(ULONG value) { pthread_mutex_lock(&logMutex); g_pAdvSecAgent->ulLoggingPeriod = value; + logReady = TRUE; pthread_cond_signal(&logCond); pthread_mutex_unlock(&logMutex); } @@ -2478,13 +2537,17 @@ static BOOL WaitForLoggerTimeout(ULONG period) clock_gettime(CLOCK_REALTIME, &_now); _ts.tv_sec = _now.tv_sec + period; - n = pthread_cond_timedwait(&logCond, &logMutex, &_ts); - if(n == ETIMEDOUT) + while (!logReady) { - ret = TRUE; + n = pthread_cond_timedwait(&logCond, &logMutex, &_ts); + if(n == ETIMEDOUT) { + ret = TRUE; + break; + } } - else + if (logReady) { + logReady = FALSE; ret = FALSE; } diff --git a/source/AdvSecurityDml/cujoagent_dcl_api.c b/source/AdvSecurityDml/cujoagent_dcl_api.c index 93b3073..dfbe859 100644 --- a/source/AdvSecurityDml/cujoagent_dcl_api.c +++ b/source/AdvSecurityDml/cujoagent_dcl_api.c @@ -338,6 +338,7 @@ static int cujoagent_wait_for_event(int epoll_fd, cujoagent_notify_t notify, int efd = -1; uint32_t event = 0; uint64_t u = NOTIFY_NONE; + int nbytes; CcspTraceDebug(("Epoll wait: epoll fd [%d] notify to expect [%d]\n", epoll_fd, notify)); @@ -358,10 +359,14 @@ static int cujoagent_wait_for_event(int epoll_fd, cujoagent_notify_t notify, return -1; } - if (read(efd, &u, sizeof(u)) < 0) { + nbytes = read(efd, &u, sizeof(u)); + if (nbytes < 0) { CcspTraceError(("Failed to read event fd [%d]\n", efd)); return -1; } + else { + CcspTraceDebug(("Read event fd %d bytes\n", nbytes)); + } if (u != notify) { CcspTraceError(("Eventfd notification mismatch: " @@ -600,6 +605,7 @@ static void *cujoagent_l1_collector(void *arg) { int collector_epoll = -1; struct epoll_event ev = {0}; struct itimerspec ts = {0}; + int nbytes; mac_addr_str_t collect_mac_str = {0}; cujoagent_bytes_to_mac_str(l1_start_tlv->mac.ether_addr_octet, @@ -726,10 +732,14 @@ static void *cujoagent_l1_collector(void *arg) { continue; } - if (read(efd, &u, sizeof(u)) < 0) { + nbytes = read(efd, &u, sizeof(u)); + if (nbytes < 0) { CcspTraceError(("Failed to read event fd [%d]\n", efd)); continue; } + else { + CcspTraceDebug(("Read event fd %d bytes\n", nbytes)); + } if (efd == collector->timer) { CcspTraceDebug(("L1 collection timer for mac [%s] has expired\n", @@ -905,7 +915,6 @@ cujoagent_start_l1_collection(struct cujo_fpc_l1_collection_start *l1_start_tlv, if (pthread_create(&thr, &attr, &cujoagent_l1_collector, collector) != 0) { CcspTraceError(("Failed to start L1 collector thread for mac [%s]\n", collect_mac_str)); - pthread_mutex_lock(&consumer->l1_lock); if (epoll_ctl(consumer->queue_epoll, EPOLL_CTL_DEL, collector->notification_ack, NULL)) { CcspTraceError(("Failed to remove L1 collector stop_ack eventfd from the " @@ -913,7 +922,13 @@ cujoagent_start_l1_collection(struct cujo_fpc_l1_collection_start *l1_start_tlv, } consumer->l1_collections[slot] = NULL; pthread_attr_destroy(&attr); - goto err; + if (collector) { + cujoagent_close_if_valid(&collector->notification_ack); + cujoagent_close_if_valid(&collector->notification); + cujoagent_close_if_valid(&collector->timer); + free(collector); + } + return -1; } pthread_attr_destroy(&attr); @@ -951,6 +966,7 @@ static void *cujoagent_socket_loop(void *arg) { struct cujo_fpc_l1_collection_start *l1_start_tlv = NULL; mac_addr_str_t collect_mac_str = {0}; + int nbytes; /* Blocking call, get a hello first and only then proceed further */ if (cujoagent_tlv_handshake(consumer->sock_fd, &paddr, &addr_len, @@ -989,10 +1005,14 @@ static void *cujoagent_socket_loop(void *arg) { } if (efd == consumer->comms_notification) { - if (read(efd, &u, sizeof(u)) == -1) { + nbytes = read(efd, &u, sizeof(u)); + if (nbytes == -1) { CcspTraceError(("Failed to read eventfd [%d]\n", efd)); continue; } + else { + CcspTraceDebug(("Read eventfd %d bytes\n", nbytes)); + } for (int j = 0; j < MAX_TO_CUJO_TLVS; j++) { if (u == consumer->tlv_notify_lut[j].notify_ready) { @@ -1149,6 +1169,7 @@ static void *cujoagent_fifo_loop(void *arg) { size_t csi_label_len = sizeof(csi_label); size_t csi_expected_len = 0; unsigned int csi_data_len = 0; + int nbytes; fifo_buf = calloc(1, fifo_payload_size); if (fifo_buf == NULL) { @@ -1233,10 +1254,14 @@ static void *cujoagent_fifo_loop(void *arg) { } } } else if (efd == consumer->fifo_notification) { - if (read(efd, &u, sizeof(u)) < 0) { + nbytes = read(efd, &u, sizeof(u)); + if (nbytes < 0) { CcspTraceError(("Failed to read event fd [%d]\n", efd)); continue; } + else { + CcspTraceDebug(("Read event fd %d bytes\n", nbytes)); + } if (u == NOTIFY_FIFO_THREAD_STOP) { notify = NOTIFY_FIFO_THREAD_RETURN; @@ -2916,7 +2941,7 @@ cujoagent_radio_temperature_handler(__attribute__((unused)) rbusHandle_t handle, return; } - unsigned int event_radio_idx = 0; + unsigned int event_radio_idx = 1; if (sscanf(subscription->eventName, DEV_WIFI_EVENTS_RADIO_TEMPERATURE, &event_radio_idx) != 1) { CcspTraceError(