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
