Ack, code review only/Thanks HansN -----Original Message----- From: praveen.malv...@oracle.com [mailto:praveen.malv...@oracle.com] Sent: den 10 december 2015 07:43 To: Hans Nordebäck; nagendr...@oracle.com; Quyen Quoc Dao Cc: opensaf-devel@lists.sourceforge.net Subject: [PATCH 1 of 1] amfd: fix amfd crash during modification of saAmfSGSuHostNodeGroup [#1594]
osaf/services/saf/amf/amfd/sg.cc | 28 +++++++++++++++++++++++----- 1 files changed, 23 insertions(+), 5 deletions(-) Command immcfg -a saAmfSGSuHostNodeGroup="" safSg=2N,safApp=OpenSAF causes amfd crash. Patch adds check to prevent deletion of saAmfSGSuHostNodeGroup or its modification to null value. diff --git a/osaf/services/saf/amf/amfd/sg.cc b/osaf/services/saf/amf/amfd/sg.cc --- a/osaf/services/saf/amf/amfd/sg.cc +++ b/osaf/services/saf/amf/amfd/sg.cc @@ -556,11 +556,15 @@ static SaAisErrorT ccb_completed_modify_ /* Attribute value removed */ if ((attr_mod->modType == SA_IMM_ATTR_VALUES_DELETE) || (attribute->attrValues == nullptr)) - continue; - - value = attribute->attrValues[0]; + value_is_deleted = true; + else { + value_is_deleted = false; + value = attribute->attrValues[0]; + } if (!strcmp(attribute->attrName, "saAmfSGType")) { + if (value_is_deleted == true) + continue; SaNameT sg_type_name = *((SaNameT *)value); if (sg->saAmfSGAdminState == SA_AMF_ADMIN_LOCKED) { @@ -579,6 +583,12 @@ static SaAisErrorT ccb_completed_modify_ } } else if (!strcmp(attribute->attrName, "saAmfSGSuHostNodeGroup")) { + if (value_is_deleted == true) { + report_ccb_validation_error(opdata, + "Deletion or Modification to NULL value not allowed"); + rc = SA_AIS_ERR_BAD_OPERATION; + goto done; + } if (ng_change_is_valid(sg, (SaNameT *)value, opdata) == false) { rc = SA_AIS_ERR_BAD_OPERATION; goto done; @@ -587,6 +597,8 @@ static SaAisErrorT ccb_completed_modify_ } else if (!strcmp(attribute->attrName, "saAmfSGNumPrefActiveSUs")) { } else if (!strcmp(attribute->attrName, "saAmfSGNumPrefStandbySUs")) { } else if (!strcmp(attribute->attrName, "saAmfSGNumPrefInserviceSUs")) { + if (value_is_deleted == true) + continue; uint32_t pref_inservice_su; pref_inservice_su = *((SaUint32T *)value); @@ -608,6 +620,8 @@ static SaAisErrorT ccb_completed_modify_ } else if (!strcmp(attribute->attrName, "saAmfSGSuRestartProb")) { } else if (!strcmp(attribute->attrName, "saAmfSGSuRestartMax")) { } else if (!strcmp(attribute->attrName, "saAmfSGAutoRepair")) { + if (value_is_deleted == true) + continue; uint32_t sg_autorepair = *((SaUint32T *)attribute->attrValues[0]); if (sg_autorepair > true ) { report_ccb_validation_error(opdata, @@ -669,8 +683,12 @@ static SaAisErrorT ccb_completed_modify_ goto done; } } else if (!strcmp(attribute->attrName, "saAmfSGSuHostNodeGroup")) { - if (value_is_deleted == true) - continue; + if (value_is_deleted == true) { + report_ccb_validation_error(opdata, + "Deletion or Modification to NULL value not allowed"); + rc = SA_AIS_ERR_BAD_OPERATION; + goto done; + } if (ng_change_is_valid(sg, (SaNameT *)value, opdata) == false) { rc = SA_AIS_ERR_BAD_OPERATION; goto done; ------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel