[devel] [PATCH 1/1] amfd: Fix the data types of attributes inconsistency in get_config() [#3128]
In Amfd, for Configuration::get_config(), object osafAmfDelayNodeFailoverTimeout and osafAmfDelayNodeFailoverNodeWaitTimeout are time_t, but the method uses uint32_t to hold the values of those attributes it leads to the stack memory corrupted --- src/amf/amfd/config.cc | 17 + 1 file changed, 9 insertions(+), 8 deletions(-) mode change 100644 => 100755 src/amf/amfd/config.cc diff --git a/src/amf/amfd/config.cc b/src/amf/amfd/config.cc old mode 100644 new mode 100755 index af72840..375f050 --- a/src/amf/amfd/config.cc +++ b/src/amf/amfd/config.cc @@ -43,20 +43,20 @@ static void ccb_apply_modify_hdlr(struct CcbUtilOperationData *opdata) { configuration->restrict_auto_repair(enabled); } else if (!strcmp(attr_mod->modAttr.attrName, "osafAmfDelayNodeFailoverTimeout")) { - uint32_t delay = 0; // default to 0 if attribute is blank + time_t delay = 0; // default to 0 if attribute is blank if (attr_mod->modType != SA_IMM_ATTR_VALUES_DELETE && attr_mod->modAttr.attrValues != nullptr) { -delay = (*((SaUint32T *)attr_mod->modAttr.attrValues[0])); +delay = (*((time_t *)attr_mod->modAttr.attrValues[0])); } avd_cb->node_failover_delay = delay; TRACE("osafAmfDelayNodeFailoverTimeout changed to '%llu'", avd_cb->node_failover_delay); } else if (!strcmp(attr_mod->modAttr.attrName, "osafAmfDelayNodeFailoverNodeWaitTimeout")) { - uint32_t delay = kDefaultNodeWaitTime; + time_t delay = kDefaultNodeWaitTime; if (attr_mod->modType != SA_IMM_ATTR_VALUES_DELETE && attr_mod->modAttr.attrValues != nullptr) { -delay = (*((SaUint32T *)attr_mod->modAttr.attrValues[0])); +delay = (*((time_t *)attr_mod->modAttr.attrValues[0])); } avd_cb->node_failover_node_wait = delay; TRACE("osafAmfDelayNodeFailoverNodeWaitTimeout changed to '%llu'", @@ -166,18 +166,19 @@ SaAisErrorT Configuration::get_config(void) { (SaImmAttrValuesT_2 ***)&attributes) == SA_AIS_OK) { uint32_t value; +time_t time_value; TRACE("reading configuration '%s'", osaf_extended_name_borrow(&dn)); if (immutil_getAttr("osafAmfRestrictAutoRepairEnable", attributes, 0, &value) == SA_AIS_OK) { configuration->restrict_auto_repair(static_cast(value)); } if (immutil_getAttr("osafAmfDelayNodeFailoverTimeout", attributes, 0, -&value) == SA_AIS_OK) { - avd_cb->node_failover_delay = value; +&time_value) == SA_AIS_OK) { + avd_cb->node_failover_delay = time_value; } if (immutil_getAttr("osafAmfDelayNodeFailoverNodeWaitTimeout", attributes, 0, -&value) == SA_AIS_OK) { - avd_cb->node_failover_node_wait = value; +&time_value) == SA_AIS_OK) { + avd_cb->node_failover_node_wait = time_value; } } -- 2.7.4 ___ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel
Re: [devel] [PATCH 1/1] amfd: Fix the data types of attributes inconsistency in get_config() [#3128]
Hi Ack ( review ) thanks Gary — From: phuc.h.chau Sent: Monday, December 16, 2019 6:59:38 PM To: Vu Minh Nguyen Cc: opensaf-devel@lists.sourceforge.net Subject: [devel] [PATCH 1/1] amfd: Fix the data types of attributes inconsistency in get_config() [#3128] In Amfd, for Configuration::get_config(), object osafAmfDelayNodeFailoverTimeout and osafAmfDelayNodeFailoverNodeWaitTimeout are time_t, but the method uses uint32_t to hold the values of those attributes it leads to the stack memory corrupted --- src/amf/amfd/config.cc | 17 + 1 file changed, 9 insertions(+), 8 deletions(-) mode change 100644 => 100755 src/amf/amfd/config.cc diff --git a/src/amf/amfd/config.cc b/src/amf/amfd/config.cc old mode 100644 new mode 100755 index af72840..375f050 --- a/src/amf/amfd/config.cc +++ b/src/amf/amfd/config.cc @@ -43,20 +43,20 @@ static void ccb_apply_modify_hdlr(struct CcbUtilOperationData *opdata) { configuration->restrict_auto_repair(enabled); } else if (!strcmp(attr_mod->modAttr.attrName, "osafAmfDelayNodeFailoverTimeout")) { - uint32_t delay = 0; // default to 0 if attribute is blank + time_t delay = 0; // default to 0 if attribute is blank if (attr_mod->modType != SA_IMM_ATTR_VALUES_DELETE && attr_mod->modAttr.attrValues != nullptr) { -delay = (*((SaUint32T *)attr_mod->modAttr.attrValues[0])); +delay = (*((time_t *)attr_mod->modAttr.attrValues[0])); } avd_cb->node_failover_delay = delay; TRACE("osafAmfDelayNodeFailoverTimeout changed to '%llu'", avd_cb->node_failover_delay); } else if (!strcmp(attr_mod->modAttr.attrName, "osafAmfDelayNodeFailoverNodeWaitTimeout")) { - uint32_t delay = kDefaultNodeWaitTime; + time_t delay = kDefaultNodeWaitTime; if (attr_mod->modType != SA_IMM_ATTR_VALUES_DELETE && attr_mod->modAttr.attrValues != nullptr) { -delay = (*((SaUint32T *)attr_mod->modAttr.attrValues[0])); +delay = (*((time_t *)attr_mod->modAttr.attrValues[0])); } avd_cb->node_failover_node_wait = delay; TRACE("osafAmfDelayNodeFailoverNodeWaitTimeout changed to '%llu'", @@ -166,18 +166,19 @@ SaAisErrorT Configuration::get_config(void) { (SaImmAttrValuesT_2 ***)&attributes) == SA_AIS_OK) { uint32_t value; +time_t time_value; TRACE("reading configuration '%s'", osaf_extended_name_borrow(&dn)); if (immutil_getAttr("osafAmfRestrictAutoRepairEnable", attributes, 0, &value) == SA_AIS_OK) { configuration->restrict_auto_repair(static_cast(value)); } if (immutil_getAttr("osafAmfDelayNodeFailoverTimeout", attributes, 0, -&value) == SA_AIS_OK) { - avd_cb->node_failover_delay = value; +&time_value) == SA_AIS_OK) { + avd_cb->node_failover_delay = time_value; } if (immutil_getAttr("osafAmfDelayNodeFailoverNodeWaitTimeout", attributes, 0, -&value) == SA_AIS_OK) { - avd_cb->node_failover_node_wait = value; +&time_value) == SA_AIS_OK) { + avd_cb->node_failover_node_wait = time_value; } } -- 2.7.4 ___ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel ___ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel
Re: [devel] [PATCH 1/1] amfd: Fix the data types of attributes inconsistency in get_config() [#3128]
Hi Phuc, Ack. Thanks, Vu On 12/16/19 2:59 PM, phuc.h.chau wrote: In Amfd, for Configuration::get_config(), object osafAmfDelayNodeFailoverTimeout and osafAmfDelayNodeFailoverNodeWaitTimeout are time_t, but the method uses uint32_t to hold the values of those attributes it leads to the stack memory corrupted --- src/amf/amfd/config.cc | 17 + 1 file changed, 9 insertions(+), 8 deletions(-) mode change 100644 => 100755 src/amf/amfd/config.cc diff --git a/src/amf/amfd/config.cc b/src/amf/amfd/config.cc old mode 100644 new mode 100755 index af72840..375f050 --- a/src/amf/amfd/config.cc +++ b/src/amf/amfd/config.cc @@ -43,20 +43,20 @@ static void ccb_apply_modify_hdlr(struct CcbUtilOperationData *opdata) { configuration->restrict_auto_repair(enabled); } else if (!strcmp(attr_mod->modAttr.attrName, "osafAmfDelayNodeFailoverTimeout")) { - uint32_t delay = 0; // default to 0 if attribute is blank + time_t delay = 0; // default to 0 if attribute is blank if (attr_mod->modType != SA_IMM_ATTR_VALUES_DELETE && attr_mod->modAttr.attrValues != nullptr) { -delay = (*((SaUint32T *)attr_mod->modAttr.attrValues[0])); +delay = (*((time_t *)attr_mod->modAttr.attrValues[0])); } avd_cb->node_failover_delay = delay; TRACE("osafAmfDelayNodeFailoverTimeout changed to '%llu'", avd_cb->node_failover_delay); } else if (!strcmp(attr_mod->modAttr.attrName, "osafAmfDelayNodeFailoverNodeWaitTimeout")) { - uint32_t delay = kDefaultNodeWaitTime; + time_t delay = kDefaultNodeWaitTime; if (attr_mod->modType != SA_IMM_ATTR_VALUES_DELETE && attr_mod->modAttr.attrValues != nullptr) { -delay = (*((SaUint32T *)attr_mod->modAttr.attrValues[0])); +delay = (*((time_t *)attr_mod->modAttr.attrValues[0])); } avd_cb->node_failover_node_wait = delay; TRACE("osafAmfDelayNodeFailoverNodeWaitTimeout changed to '%llu'", @@ -166,18 +166,19 @@ SaAisErrorT Configuration::get_config(void) { (SaImmAttrValuesT_2 ***)&attributes) == SA_AIS_OK) { uint32_t value; +time_t time_value; TRACE("reading configuration '%s'", osaf_extended_name_borrow(&dn)); if (immutil_getAttr("osafAmfRestrictAutoRepairEnable", attributes, 0, &value) == SA_AIS_OK) { configuration->restrict_auto_repair(static_cast(value)); } if (immutil_getAttr("osafAmfDelayNodeFailoverTimeout", attributes, 0, -&value) == SA_AIS_OK) { - avd_cb->node_failover_delay = value; +&time_value) == SA_AIS_OK) { + avd_cb->node_failover_delay = time_value; } if (immutil_getAttr("osafAmfDelayNodeFailoverNodeWaitTimeout", attributes, 0, -&value) == SA_AIS_OK) { - avd_cb->node_failover_node_wait = value; +&time_value) == SA_AIS_OK) { + avd_cb->node_failover_node_wait = time_value; } } ___ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel