ack, code review only./Thanks HansN On 11/25/2015 07:20 AM, [email protected] wrote: > 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
