osaf/services/saf/amf/amfd/comp.cc |  62 ++++++++++++++++++++++++++++++++++---
 1 files changed, 57 insertions(+), 5 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();
 
@@ -895,13 +896,18 @@ static SaAisErrorT ccb_completed_modify_
                const SaImmAttrValuesT_2 *attribute = &attr_mod->modAttr;
                void *value;
 
-               /* 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) {

------------------------------------------------------------------------------
Go from Idea to Many App Stores Faster with Intel(R) XDK
Give your users amazing mobile app experiences with Intel(R) XDK.
Use one codebase in this all-in-one HTML5 development environment.
Design, debug & build mobile apps & 2D/3D high-impact games for multiple OSs.
http://pubads.g.doubleclick.net/gampad/clk?id=254741551&iu=/4140
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to