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_list);
-               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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to