Hi Praveen,

Ack (Test only).

Thanks,
Quyen

-----Original Message-----
From: [email protected] [mailto:[email protected]] 
Sent: Wednesday, November 25, 2015 1:21 PM
To: [email protected]; [email protected];
[email protected]
Cc: [email protected]
Subject: [PATCH 1 of 1] amfd: fix amfd assert during modification of comp
attributes v2 [#1592]

 osaf/services/saf/amf/amfd/comp.cc |  64
++++++++++++++++++++++++++++++++++---
 1 files changed, 58 insertions(+), 6 deletions(-)


Following three commands causes assert in amfd:
immcfg -a saAmfCompNumMaxAmStopAttempts=
safComp=AmfDemo,safSu=SU1,safSg=AmfDemo,safApp=AmfDemo1
immcfg -a saAmfCompNumMaxAmStartAttempts=
safComp=AmfDemo,safSu=SU1,safSg=AmfDemo,safApp=AmfDemo1
immcfg -a osafAmfCompHcCmdArgv=
safComp=AmfDemo,safSu=SU1,safSg=AmfDemo,safApp=AmfDemo1

Patch rejects CCB modification on unsupported attributes and avoids amfd
assert.

diff --git a/osaf/services/saf/amf/amfd/comp.cc
b/osaf/services/saf/amf/amfd/comp.cc
--- a/osaf/services/saf/amf/amfd/comp.cc
+++ b/osaf/services/saf/amf/amfd/comp.cc
@@ -886,6 +886,7 @@ static SaAisErrorT ccb_completed_modify_
        int i = 0;
        AVD_COMP *comp;
        SaAisErrorT rc = SA_AIS_ERR_BAD_OPERATION;
+       bool value_is_deleted;
 
        TRACE_ENTER();
 
@@ -893,15 +894,20 @@ static SaAisErrorT ccb_completed_modify_
 
        while ((attr_mod = opdata->param.modify.attrMods[i++]) != nullptr) {
                const SaImmAttrValuesT_2 *attribute = &attr_mod->modAttr;
-               void *value;
+               void *value = nullptr;
 
-               /* Attribute value removed */
-               if ((attr_mod->modType == SA_IMM_ATTR_VALUES_DELETE) ||
(attribute->attrValues == nullptr))
-                       continue;
-
-               value = attribute->attrValues[0];
+                if ((attr_mod->modType == SA_IMM_ATTR_VALUES_DELETE) ||
(attribute->attrValues == nullptr)) {
+                        /* Attribute value is deleted, revert to default
value */
+                        value_is_deleted = true;
+                } else {
+                        /* Attribute value is modified */
+                        value_is_deleted = false;
+                        value = attribute->attrValues[0];
+                }
 
                if (!strcmp(attribute->attrName, "saAmfCompType")) {
+                       if (value_is_deleted == true)
+                               continue;
                        SaNameT dn = *((SaNameT*)value);
                        if (nullptr ==
comptype_db->find(Amf::to_string(&dn))) {
                                report_ccb_validation_error(opdata,
"saAmfCompType '%s' not found", dn.value); @@ -941,6 +947,8 @@ static
SaAisErrorT ccb_completed_modify_
                                }
                        }
                } else if (!strcmp(attribute->attrName,
"saAmfCompInstantiateCmdArgv")) {
+                       if (value_is_deleted == true)
+                               continue;
                        char *param_val = *((char **)value);
                        if (nullptr == param_val) {
                                report_ccb_validation_error(opdata,
@@ -948,6 +956,8 @@ static SaAisErrorT ccb_completed_modify_
                                goto done;
                        }
                } else if (!strcmp(attribute->attrName,
"saAmfCompInstantiateTimeout")) {
+                       if (value_is_deleted == true)
+                               continue;
                        SaTimeT timeout;
                        m_NCS_OS_HTONLL_P(&timeout, (*((SaTimeT *)value)));
                        if (timeout == 0) {
@@ -956,6 +966,8 @@ static SaAisErrorT ccb_completed_modify_
                                goto done;
                        }
                } else if (!strcmp(attribute->attrName,
"saAmfCompInstantiationLevel")) {
+                       if (value_is_deleted == true)
+                               continue;
                        uint32_t num_inst = *((SaUint32T *)value);
                        if (num_inst == 0) {
                                report_ccb_validation_error(opdata,
"Modification of saAmfCompInstantiationLevel Fail,"
@@ -963,6 +975,8 @@ static SaAisErrorT ccb_completed_modify_
                                goto done;
                        }
                } else if (!strcmp(attribute->attrName,
"saAmfCompNumMaxInstantiateWithoutDelay")) {
+                       if (value_is_deleted == true)
+                               continue;
                        uint32_t num_inst = *((SaUint32T *)value);
                        if (num_inst == 0) {
                                report_ccb_validation_error(opdata,
"Modification of saAmfCompNumMaxInstantiateWithoutDelay"
@@ -970,6 +984,8 @@ static SaAisErrorT ccb_completed_modify_
                                goto done;
                        }
                } else if (!strcmp(attribute->attrName,
"saAmfCompNumMaxInstantiateWithDelay")) {
+                       if (value_is_deleted == true)
+                               continue;
                        uint32_t num_inst = *((SaUint32T *)value);
                        if (num_inst == 0) {
                                report_ccb_validation_error(opdata,
"Modification of saAmfCompNumMaxInstantiateWithDelay"
@@ -977,6 +993,8 @@ static SaAisErrorT ccb_completed_modify_
                                goto done;
                        }
                } else if (!strcmp(attribute->attrName,
"saAmfCompDelayBetweenInstantiateAttempts")) {
+                       if (value_is_deleted == true)
+                               continue;
                        SaTimeT timeout;
                        m_NCS_OS_HTONLL_P(&timeout, (*((SaTimeT *)value)));
                        if (timeout == 0) {
@@ -985,6 +1003,8 @@ static SaAisErrorT ccb_completed_modify_
                                goto done;
                        }
                } else if (!strcmp(attribute->attrName,
"saAmfCompTerminateCmdArgv")) {
+                       if (value_is_deleted == true)
+                               continue;
                        char *param_val = *((char **)value);
                        if (nullptr == param_val) {
                                report_ccb_validation_error(opdata,
@@ -992,6 +1012,8 @@ static SaAisErrorT ccb_completed_modify_
                                goto done;
                        }
                } else if (!strcmp(attribute->attrName,
"saAmfCompTerminateTimeout")) {
+                       if (value_is_deleted == true)
+                               continue;
                        SaTimeT timeout;
                        m_NCS_OS_HTONLL_P(&timeout, (*((SaTimeT *)value)));
                        if (timeout == 0) {
@@ -1000,6 +1022,8 @@ static SaAisErrorT ccb_completed_modify_
                                goto done;
                        }
                } else if (!strcmp(attribute->attrName,
"saAmfCompCleanupCmdArgv")) {
+                       if (value_is_deleted == true)
+                               continue;
                        char *param_val = *((char **)value);
                        if (nullptr == param_val) {
                                report_ccb_validation_error(opdata,
@@ -1007,6 +1031,8 @@ static SaAisErrorT ccb_completed_modify_
                                goto done;
                        }
                } else if (!strcmp(attribute->attrName,
"saAmfCompCleanupTimeout")) {
+                       if (value_is_deleted == true)
+                               continue;
                        SaTimeT timeout;
                        m_NCS_OS_HTONLL_P(&timeout, (*((SaTimeT *)value)));
                        if (timeout == 0) {
@@ -1015,6 +1041,8 @@ static SaAisErrorT ccb_completed_modify_
                                goto done;
                        }
                } else if (!strcmp(attribute->attrName,
"saAmfCompAmStartCmdArgv")) {
+                       if (value_is_deleted == true)
+                               continue;
                        char *param_val = *((char **)value);
                        if (nullptr == param_val) {
                                report_ccb_validation_error(opdata,
@@ -1027,6 +1055,8 @@ static SaAisErrorT ccb_completed_modify_
                                goto done;
                        }
                } else if (!strcmp(attribute->attrName,
"saAmfCompAmStartTimeout")) {
+                       if (value_is_deleted == true)
+                               continue;
                        SaTimeT timeout;
                        m_NCS_OS_HTONLL_P(&timeout, (*((SaTimeT *)value)));
                        if (timeout == 0) {
@@ -1040,6 +1070,8 @@ static SaAisErrorT ccb_completed_modify_
                                goto done;
                        }
                } else if (!strcmp(attribute->attrName,
"saAmfCompNumMaxAmStartAttempt")) {
+                       if (value_is_deleted == true)
+                               continue;
                        uint32_t num_am_start = *((SaUint32T *)value);
                        if (true == comp->su->su_is_external) {
                                report_ccb_validation_error(opdata,
"Modification of saAmfCompNumMaxAmStartAttempt Fail,"
@@ -1052,6 +1084,8 @@ static SaAisErrorT ccb_completed_modify_
                                goto done;
                        } 
                } else if (!strcmp(attribute->attrName,
"saAmfCompAmStopCmdArgv")) {
+                       if (value_is_deleted == true)
+                               continue;
                        char *param_val = *((char **)value);
                        if (true == comp->su->su_is_external) {
                                report_ccb_validation_error(opdata,
@@ -1063,6 +1097,8 @@ static SaAisErrorT ccb_completed_modify_
                                goto done;
                        }
                } else if (!strcmp(attribute->attrName,
"saAmfCompAmStopTimeout")) {
+                       if (value_is_deleted == true)
+                               continue;
                        SaTimeT timeout;
                        if (true == comp->su->su_is_external) {
                                report_ccb_validation_error(opdata,
@@ -1076,6 +1112,8 @@ static SaAisErrorT ccb_completed_modify_
                                goto done;
                        }               
                } else if (!strcmp(attribute->attrName,
"saAmfCompNumMaxAmStopAttempt")) {      
+                       if (value_is_deleted == true)
+                               continue;
                        uint32_t num_am_stop = *((SaUint32T *)value);
                        if (true == comp->su->su_is_external) {
                                report_ccb_validation_error(opdata,
"Modification of saAmfCompNumMaxAmStopAttempt Fail,"
@@ -1088,6 +1126,8 @@ static SaAisErrorT ccb_completed_modify_
                                goto done;
                        }               
                } else if (!strcmp(attribute->attrName,
"saAmfCompCSISetCallbackTimeout")) {
+                       if (value_is_deleted == true)
+                               continue;
                        SaTimeT timeout;
                        m_NCS_OS_HTONLL_P(&timeout, (*((SaTimeT *)value)));
                        if (timeout == 0) {
@@ -1096,6 +1136,8 @@ static SaAisErrorT ccb_completed_modify_
                                goto done;
                        }               
                } else if (!strcmp(attribute->attrName,
"saAmfCompCSIRmvCallbackTimeout")) {
+                       if (value_is_deleted == true)
+                               continue;
                        SaTimeT timeout;
                        m_NCS_OS_HTONLL_P(&timeout, (*((SaTimeT *)value)));
                        if (timeout == 0) {
@@ -1104,6 +1146,8 @@ static SaAisErrorT ccb_completed_modify_
                                goto done;
                        }
                } else if (!strcmp(attribute->attrName,
"saAmfCompQuiescingCompleteTimeout")) {
+                       if (value_is_deleted == true)
+                               continue;
                        SaTimeT timeout;
                        m_NCS_OS_HTONLL_P(&timeout, (*((SaTimeT *)value)));
                        if (timeout == 0) {
@@ -1112,6 +1156,8 @@ static SaAisErrorT ccb_completed_modify_
                                goto done;
                        }
                } else if (!strcmp(attribute->attrName,
"saAmfCompRecoveryOnError")) {
+                       if (value_is_deleted == true)
+                               continue;
                        uint32_t recovery = *((SaUint32T *)value);
                        if ((recovery < SA_AMF_NO_RECOMMENDATION) ||
(recovery > SA_AMF_CONTAINER_RESTART )) {
                                report_ccb_validation_error(opdata,
"Modification of saAmfCompRecoveryOnError Fail,"
@@ -1119,6 +1165,8 @@ static SaAisErrorT ccb_completed_modify_
                                goto done;
                        } 
                } else if (!strcmp(attribute->attrName,
"saAmfCompDisableRestart")) {
+                       if (value_is_deleted == true)
+                               continue;
                        SaBoolT val = *((SaBoolT *)value);
                        if ((val != SA_TRUE) && (val != SA_FALSE)) {
                                report_ccb_validation_error(opdata,
@@ -1126,6 +1174,8 @@ static SaAisErrorT ccb_completed_modify_
                                goto done;
                        }
                } else if (!strcmp(attribute->attrName,
"saAmfCompProxyCsi")) {
+                       if (value_is_deleted == true)
+                               continue;
                        SaNameT name;
                        name = *((SaNameT *)value);
                        if (name.length == 0) {
@@ -1133,6 +1183,8 @@ static SaAisErrorT ccb_completed_modify_
                                goto done;
                        }
                } else if (!strcmp(attribute->attrName,
"saAmfCompContainerCsi")) {
+                       if (value_is_deleted == true)
+                               continue;
                        SaNameT name;
                        name = *((SaNameT *)value);
                        if (name.length == 0) {


------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to