Hi Zoran, ACK from me.
Sincerely, Hoang -----Original Message----- From: A V Mahesh [mailto:mahesh.va...@oracle.com] Sent: Friday, January 13, 2017 10:15 AM To: Zoran Milinkovic <zoran.milinko...@ericsson.com> Cc: opensaf-devel@lists.sourceforge.net Subject: Re: [devel] [PATCH 1 of 1] ckpt: fix extended name issues in the library [#2128] Hi Zora, ACK. LONG DN not tested . -AVM On 1/10/2017 8:57 PM, Zoran Milinkovic wrote: > src/ckpt/agent/cpa_api.c | 26 +++++++++++++++----------- > src/ckpt/ckptnd/cpnd_evt.c | 12 ++++-------- > 2 files changed, 19 insertions(+), 19 deletions(-) > > > Fix string temination issues when SaNameT value is provided to saCkptCheckpointOpen(), saCkptCheckpointOpenAsync() and saCkptCheckpointUnlink(). > > diff --git a/src/ckpt/agent/cpa_api.c b/src/ckpt/agent/cpa_api.c > --- a/src/ckpt/agent/cpa_api.c > +++ b/src/ckpt/agent/cpa_api.c > @@ -871,13 +871,17 @@ SaAisErrorT saCkptCheckpointOpen(SaCkptH > SaTimeT time_out=0; > CPA_GLOBAL_CKPT_NODE *gc_node = NULL; > SaConstStringT ckpt_name = NULL; > + size_t ckpt_name_len; > > TRACE_ENTER2("SaCkptCheckpointHandleT passed is %llx",ckptHandle); > if ((checkpointName == NULL) || (checkpointHandle == NULL) || (osaf_extended_name_length(checkpointName) == 0)) { > TRACE_4("Cpa CkptOpen Api failed with return value:%d,ckptHandle:%llx", SA_AIS_ERR_INVALID_PARAM, ckptHandle); > TRACE_LEAVE2("API return code = %u", SA_AIS_ERR_INVALID_PARAM); > return SA_AIS_ERR_INVALID_PARAM; > - } else if (osaf_extended_name_length(checkpointName) > kOsafMaxDnLength) { > + } > + > + ckpt_name_len = osaf_extended_name_length(checkpointName); > + if (ckpt_name_len > kOsafMaxDnLength) { > TRACE_4("Cpa CkptOpen Api failed with return value:%d,ckptHandle:%llx", SA_AIS_ERR_TOO_BIG, ckptHandle); > TRACE_LEAVE2("API return code = %u", SA_AIS_ERR_TOO_BIG); > return SA_AIS_ERR_TOO_BIG; > @@ -962,7 +966,7 @@ SaAisErrorT saCkptCheckpointOpen(SaCkptH > lc_node->cl_hdl = ckptHandle; > lc_node->open_flags = checkpointOpenFlags; > > - lc_node->ckpt_name = strdup(ckpt_name); > + lc_node->ckpt_name = strndup(ckpt_name, ckpt_name_len); > > /* Add CPA_LOCAL_CKPT_NODE to lcl_ckpt_hdl_tree */ > proc_rc = cpa_lcl_ckpt_node_add(&cb->lcl_ckpt_tree, lc_node); @@ > -981,7 +985,7 @@ SaAisErrorT saCkptCheckpointOpen(SaCkptH > evt.info.cpnd.info.openReq.client_hdl = ckptHandle; > evt.info.cpnd.info.openReq.lcl_ckpt_hdl = lc_node->lcl_ckpt_hdl; > > - osaf_extended_name_lend(ckpt_name, &evt.info.cpnd.info.openReq.ckpt_name); > + osaf_extended_name_lend(lc_node->ckpt_name, > +&evt.info.cpnd.info.openReq.ckpt_name); > > if (checkpointCreationAttributes) { > evt.info.cpnd.info.openReq.ckpt_attrib = > *checkpointCreationAttributes; @@ -1178,6 +1182,7 @@ SaAisErrorT saCkptCheckpointOpenAsync(Sa > CPA_CLIENT_NODE *cl_node = NULL; > uint32_t proc_rc = NCSCC_RC_SUCCESS; > SaConstStringT ckpt_name = NULL; > + size_t ckpt_name_len; > > TRACE_ENTER2("SaCkptCheckpointHandleT passed is %llx",ckptHandle); > > @@ -1185,7 +1190,10 @@ SaAisErrorT saCkptCheckpointOpenAsync(Sa > TRACE_4("cpa CkptOpenAsync Api failed with return value:%d,ckptHandle:%llx", SA_AIS_ERR_INVALID_PARAM, ckptHandle); > TRACE_LEAVE2("API return code = %u", SA_AIS_ERR_INVALID_PARAM); > return SA_AIS_ERR_INVALID_PARAM; > - } else if (osaf_extended_name_length(checkpointName) > kOsafMaxDnLength) { > + } > + > + ckpt_name_len = osaf_extended_name_length(checkpointName); > + if (ckpt_name_len > kOsafMaxDnLength) { > TRACE_4("Cpa CkptOpenAsync Api failed with return value:%d,ckptHandle:%llx", SA_AIS_ERR_TOO_BIG, ckptHandle); > TRACE_LEAVE2("API return code = %u", SA_AIS_ERR_TOO_BIG); > return SA_AIS_ERR_TOO_BIG; > @@ -1262,7 +1270,7 @@ SaAisErrorT saCkptCheckpointOpenAsync(Sa > lc_node->lcl_ckpt_hdl = NCS_PTR_TO_UNS64_CAST(lc_node); > lc_node->cl_hdl = ckptHandle; > lc_node->open_flags = checkpointOpenFlags; > - lc_node->ckpt_name = strdup(ckpt_name); > + lc_node->ckpt_name = strndup(ckpt_name, ckpt_name_len); > > /* Add CPA_LOCAL_CKPT_NODE to lcl_ckpt_hdl_tree */ > proc_rc = cpa_lcl_ckpt_node_add(&cb->lcl_ckpt_tree, lc_node); @@ > -1281,7 +1289,7 @@ SaAisErrorT saCkptCheckpointOpenAsync(Sa > evt.info.cpnd.info.openReq.client_hdl = ckptHandle; > evt.info.cpnd.info.openReq.lcl_ckpt_hdl = lc_node->lcl_ckpt_hdl; > > - osaf_extended_name_lend(ckpt_name, &evt.info.cpnd.info.openReq.ckpt_name); > + osaf_extended_name_lend(lc_node->ckpt_name, > +&evt.info.cpnd.info.openReq.ckpt_name); > > if (checkpointCreationAttributes) { > evt.info.cpnd.info.openReq.ckpt_attrib = > *checkpointCreationAttributes; @@ -1585,7 +1593,6 @@ SaAisErrorT saCkptCheckpointUnlink(SaCkp > uint32_t proc_rc = NCSCC_RC_SUCCESS; > CPA_CLIENT_NODE *cl_node = NULL; > CPA_CB *cb = NULL; > - SaConstStringT ckpt_name = NULL; > > TRACE_ENTER2("SaCkptCheckpointHandleT passed is %llx",ckptHandle); > /* For unlink CPA will not perform any operation other than passing > @@ -1600,8 +1607,6 @@ SaAisErrorT saCkptCheckpointUnlink(SaCkp > return SA_AIS_ERR_TOO_BIG; > } > > - ckpt_name = osaf_extended_name_borrow(checkpointName); > - > /* retrieve CPA CB */ > m_CPA_RETRIEVE_CB(cb); > if (!cb) { > @@ -1640,8 +1645,7 @@ SaAisErrorT saCkptCheckpointUnlink(SaCkp > memset(&evt, 0, sizeof(CPSV_EVT)); > evt.type = CPSV_EVT_TYPE_CPND; > evt.info.cpnd.type = CPND_EVT_A2ND_CKPT_UNLINK; > - > - osaf_extended_name_lend(ckpt_name, &evt.info.cpnd.info.ulinkReq.ckpt_name); > + evt.info.cpnd.info.ulinkReq.ckpt_name = *checkpointName; > > /* IF CPND IS DOWN */ > if (false == cb->is_cpnd_up) { > diff --git a/src/ckpt/ckptnd/cpnd_evt.c b/src/ckpt/ckptnd/cpnd_evt.c > --- a/src/ckpt/ckptnd/cpnd_evt.c > +++ b/src/ckpt/ckptnd/cpnd_evt.c > @@ -4645,19 +4645,15 @@ uint32_t cpnd_evt_destroy(CPSV_EVT *evt) > break; > } > } else if (evt->info.cpnd.type == CPND_EVT_A2ND_CKPT_OPEN) { > - if (osaf_is_an_extended_name(&evt->info.cpnd.info.openReq.ckpt_name)) > - free((void *)osaf_extended_name_borrow(&evt->info.cpnd.info.openReq.ckpt_name)); > + osaf_extended_name_free(&evt->info.cpnd.info.openReq.ckpt_name); > } else if (evt->info.cpnd.type == CPND_EVT_A2ND_CKPT_UNLINK) { > - if (osaf_is_an_extended_name(&evt->info.cpnd.info.ulinkReq.ckpt_name)) > - free((void *)osaf_extended_name_borrow(&evt->info.cpnd.info.ulinkReq.ckpt_name)); > + osaf_extended_name_free(&evt->info.cpnd.info.ulinkReq.ckpt_name); > } else if (evt->info.cpnd.type == CPND_EVT_A2ND_CKPT_LIST_UPDATE) { > - if (osaf_is_an_extended_name(&evt->info.cpnd.info.ckptListUpdate.ckpt_name)) > - free((void *)osaf_extended_name_borrow(&evt->info.cpnd.info.ckptListUpdate.ckpt_name)); > + > +osaf_extended_name_free(&evt->info.cpnd.info.ckptListUpdate.ckpt_name > +); > } else if (evt->info.cpnd.type == CPND_EVT_D2ND_CKPT_CREATE) { > if (evt->info.cpnd.info.ckpt_create.ckpt_info.dest_list != NULL) > m_MMGR_FREE_CPSV_SYS_MEMORY(evt->info.cpnd.info.ckpt_create.ckpt_info.dest_l ist); > - if (osaf_is_an_extended_name(&evt->info.cpnd.info.ckpt_create.ckpt_name)) > - free((void *)osaf_extended_name_borrow(&evt->info.cpnd.info.ckpt_create.ckpt_name)); > + > +osaf_extended_name_free(&evt->info.cpnd.info.ckpt_create.ckpt_name); > } > > m_MMGR_FREE_CPSV_EVT(evt, NCS_SERVICE_ID_CPND); ---------------------------------------------------------------------------- -- Developer Access Program for Intel Xeon Phi Processors Access to Intel Xeon Phi processor-based developer platforms. With one year of Intel Parallel Studio XE. Training and support from Colfax. Order your platform today. http://sdm.link/xeonphi _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel ------------------------------------------------------------------------------ Developer Access Program for Intel Xeon Phi Processors Access to Intel Xeon Phi processor-based developer platforms. With one year of Intel Parallel Studio XE. Training and support from Colfax. Order your platform today. http://sdm.link/xeonphi _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel