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