Hi Tai,

Please check my comments [Thien].

Best Regards,
Thien

________________________________
From: Tai Huynh Nguyen <tai.h.ngu...@dektech.com.au>
Sent: Wednesday, February 28, 2024 6:02 PM
To: Dat Tran Quoc Phan <dat.tq.p...@dektech.com.au>; Thang Duc Nguyen 
<thang.d.ngu...@dektech.com.au>; Thien Minh Huynh <thien.m.hu...@dektech.com.au>
Cc: opensaf-devel@lists.sourceforge.net <opensaf-devel@lists.sourceforge.net>; 
Tai Huynh Nguyen <tai.h.ngu...@dektech.com.au>
Subject: [PATCH 1/1] smf: Fix errors reported by valgrind [#3347]

Fix access uninitialised value, definitely lost and mismatched free()
---
 src/smf/common/smfsv_evt.c        | 12 ++++++------
 src/smf/smfd/SmfCampaignThread.cc | 11 ++++++++++-
 src/smf/smfd/SmfExecControl.cc    |  3 ++-
 src/smf/smfd/SmfUpgradeStep.cc    |  2 +-
 src/smf/smfd/SmfUtils_ObjExist.cc |  2 +-
 src/smf/smfd/smfd_campaign_oi.cc  | 10 +++++++++-
 6 files changed, 29 insertions(+), 11 deletions(-)

diff --git a/src/smf/common/smfsv_evt.c b/src/smf/common/smfsv_evt.c
index 2df889fca..d28621401 100644
--- a/src/smf/common/smfsv_evt.c
+++ b/src/smf/common/smfsv_evt.c
@@ -168,15 +168,15 @@ uint32_t smf_enc_cbk_rsp(SMF_RESP_EVT *i_evt, NCS_UBAID 
*o_ub)
         uint32_t rc = NCSCC_RC_SUCCESS;
         uint8_t *p8;

-       p8 = ncs_enc_reserve_space(o_ub, sizeof(SMF_RESP_EVT));
+       p8 = ncs_enc_reserve_space(o_ub, 8);
[Thien]: Should not decrease this size , It's NBC. Coredump will happens when 
upgrade.
should keep and encoding more 4byte

         if (p8 == NULL) {
                 LOG_ER("ncs_enc_reserve_space failed");
                 goto err;
         }
-       ncs_encode_64bit(&p8, i_evt->inv_id);
+       ncs_encode_32bit(&p8, i_evt->inv_id);
         ncs_encode_32bit(&p8, i_evt->err);

-       ncs_enc_claim_space(o_ub, sizeof(SMF_RESP_EVT));
+       ncs_enc_claim_space(o_ub, 8);

         return rc;
 err:
@@ -229,9 +229,9 @@ uint32_t smf_dec_cbk_rsp(NCS_UBAID *i_ub, SMF_RESP_EVT 
*o_evt)
                 goto err;
         }

-       p8 = ncs_dec_flatten_space(i_ub, local_data, 8);
-       o_evt->inv_id = ncs_decode_64bit(&p8);
-       ncs_dec_skip_space(i_ub, 8);
+       p8 = ncs_dec_flatten_space(i_ub, local_data, 4);
+       o_evt->inv_id = ncs_decode_32bit(&p8);
+       ncs_dec_skip_space(i_ub, 4);

         p8 = ncs_dec_flatten_space(i_ub, local_data, 4);
         o_evt->err = ncs_decode_32bit(&p8);
diff --git a/src/smf/smfd/SmfCampaignThread.cc 
b/src/smf/smfd/SmfCampaignThread.cc
index 1f76c3e5a..ba56844ca 100644
--- a/src/smf/smfd/SmfCampaignThread.cc
+++ b/src/smf/smfd/SmfCampaignThread.cc
@@ -493,7 +493,11 @@ void SmfCampaignThread::ntfNotificationCallback(
             notification->notificationType);
     }
   } while (false);
-
+  if (notification->notificationType == SA_NTF_TYPE_STATE_CHANGE) {
+      saNtfNotificationFree(
+      notification->notification.stateChangeNotification
+      .notificationHandle);
+  }
   TRACE_LEAVE();
 }
 /**
@@ -669,6 +673,9 @@ int SmfCampaignThread::sendStateNotification(
     return -1;
   }

+  memset(ntfStateNot.notificationHeader.correlatedNotifications, 0,
+        ntfStateNot.notificationHeader.numCorrelatedNotifications*
+        sizeof(SaNtfIdentifierT));
   /* Notifying object */
   size_t length = sizeof(SMF_NOTIFYING_OBJECT);
   if (length > static_cast<size_t>(GetSmfMaxDnLength())) {
@@ -682,6 +689,7 @@ int SmfCampaignThread::sendStateNotification(
     result = -1;
     goto done;
   }
+  memset(value, '\0', length + 1);
[Thien]: should use length instead length + 1. Because the last position has 
been filled by line "value[length] = '\0';"

   memcpy(value, SMF_NOTIFYING_OBJECT, length - 1);
   value[length] = '\0';
   osaf_extended_name_steal(value,
@@ -700,6 +708,7 @@ int SmfCampaignThread::sendStateNotification(
     result = -1;
     goto done;
   }
+  memset(value, '\0', length + 1);
[Thien]: should use length instead length + 1. Because the last position has 
been filled by line "value[length] = '\0';"

   memcpy(value, dn.c_str(), length - 1);
   value[length] = '\0';
   osaf_extended_name_steal(value,
diff --git a/src/smf/smfd/SmfExecControl.cc b/src/smf/smfd/SmfExecControl.cc
index 27584385f..87ebd4a1b 100644
--- a/src/smf/smfd/SmfExecControl.cc
+++ b/src/smf/smfd/SmfExecControl.cc
@@ -89,7 +89,7 @@ bool createBalancedProcs() {
     ssproc->setProcName("safSmfProc=SmfBalancedProc" + 
std::to_string(procnum));
     // Balanced procedures may not be run in parallel
     ssproc->setExecLevel(std::to_string(procnum));
-    ssproc->setIsMergedProcedure(true);  // For cleanup purposes
+    ssproc->setIsMergedProcedure(false);  // For cleanup purposes
     // Each new procedure holds the balanced group it steps over
     ssproc->setBalancedGroup(std::vector<std::string>(itr, iend));
     balancedprocs.push_back(ssproc);
@@ -337,6 +337,7 @@ SmfUpgradeStep* mergeStep(SmfUpgradeProcedure* procedure,
       TRACE("adding modifications and bundle ref from node:%s",
             step->getSwNode().c_str());
       newstep->addModifications(step->getModifications());
+      step->getModifications().clear();
       procedure->mergeBundleRefRollingToSingleStep(newstep, step);
     }
   }
diff --git a/src/smf/smfd/SmfUpgradeStep.cc b/src/smf/smfd/SmfUpgradeStep.cc
index e012ef913..6ba5a2c66 100644
--- a/src/smf/smfd/SmfUpgradeStep.cc
+++ b/src/smf/smfd/SmfUpgradeStep.cc
@@ -2180,7 +2180,7 @@ bool SmfUpgradeStep::waitForBundleCmdResult(
             }

             i_swNodeList.remove(evt->event.swResult.nodeName);
-            delete (evt->event.swResult.nodeName);
+            free(evt->event.swResult.nodeName);
             delete (evt);
             break;
           }
diff --git a/src/smf/smfd/SmfUtils_ObjExist.cc 
b/src/smf/smfd/SmfUtils_ObjExist.cc
index f89317a08..5278b870c 100644
--- a/src/smf/smfd/SmfUtils_ObjExist.cc
+++ b/src/smf/smfd/SmfUtils_ObjExist.cc
@@ -291,6 +291,6 @@
       // Failed. No valid object RDN is found
       object_rdn_.clear();
     }
-
+    saImmOmClassDescriptionMemoryFree_2(om_handle_, attr_definitions);
     return rc;
   }
diff --git a/src/smf/smfd/smfd_campaign_oi.cc b/src/smf/smfd/smfd_campaign_oi.cc
index 831b300f8..ffd6063d6 100644
--- a/src/smf/smfd/smfd_campaign_oi.cc
+++ b/src/smf/smfd/smfd_campaign_oi.cc
@@ -1210,22 +1210,30 @@ uint32_t read_config_and_set_control_block(smfd_cb_t 
*cb) {
   } else {
     LOG_NO("smfKeepDuState = %d", *keepDuState);
   }
-
+  if (cb->backupCreateCmd != NULL) free(cb->backupCreateCmd);
   cb->backupCreateCmd = strdup(backupCreateCmd);
+  if (cb->bundleCheckCmd != NULL) free(cb->bundleCheckCmd);
   cb->bundleCheckCmd = strdup(bundleCheckCmd);
+  if (cb->nodeCheckCmd != NULL) free(cb->nodeCheckCmd);
   cb->nodeCheckCmd = strdup(nodeCheckCmd);
+  if (cb->repositoryCheckCmd != NULL) free(cb->repositoryCheckCmd);
   cb->repositoryCheckCmd = strdup(repositoryCheckCmd);
+  if (cb->clusterRebootCmd != NULL) free(cb->clusterRebootCmd);
   cb->clusterRebootCmd = strdup(clusterRebootCmd);
   cb->adminOpTimeout = *adminOpTimeout;
   cb->cliTimeout = *cliTimeout;
   cb->rebootTimeout = *rebootTimeout;
   if ((smfNodeBundleActCmd != NULL) && (strcmp(smfNodeBundleActCmd, "") != 0)) 
{
+    if (cb->nodeBundleActCmd != NULL) free(cb->nodeBundleActCmd);
     cb->nodeBundleActCmd = strdup(smfNodeBundleActCmd);
   }
+  if (cb->smfSiSwapSiName != NULL) free (cb->smfSiSwapSiName);
   cb->smfSiSwapSiName = strdup(smfSiSwapSiName);
   cb->smfSiSwapMaxRetry = *smfSiSwapMaxRetry;
   cb->smfCampMaxRestart = *smfCampMaxRestart;
+  if (cb->smfImmPersistCmd != NULL) free(cb->smfImmPersistCmd);
   cb->smfImmPersistCmd = strdup(smfImmPersistCmd);
+  if (cb->smfNodeRebootCmd != NULL) free(cb->smfNodeRebootCmd);
   cb->smfNodeRebootCmd = strdup(smfNodeRebootCmd);
   cb->smfInactivatePbeDuringUpgrade = *smfInactivatePbeDuringUpgrade;
   cb->smfVerifyEnable = *smfVerifyEnable;
--
2.25.1

_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to