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

Reply via email to