Skip to content

Commit

Permalink
fix #2
Browse files Browse the repository at this point in the history
1. Fix the memory corruption caused by improper space allocation
2. Fix iov access, need indexing, otherwise its the same element
  • Loading branch information
artpol84 committed Dec 20, 2017
1 parent 83e3b40 commit 1c2a74c
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 13 deletions.
4 changes: 2 additions & 2 deletions src/ucp/core/ucp_request.c
Original file line number Diff line number Diff line change
Expand Up @@ -283,9 +283,9 @@ UCS_PROFILE_FUNC(ucs_status_t, ucp_request_memory_reg,
goto err;
}
for (iov_it = 0; iov_it < iovcnt; ++iov_it) {
size_t iov_len = ucp_dt_extent(iov->dt, iov->count, NULL, NULL);
size_t iov_len = ucp_dt_extent(iov[iov_it].dt, iov[iov_it].count, NULL, NULL);
if (iov_len) {
status = uct_md_mem_reg(uct_md, iov->buffer, iov_len, 0,
status = uct_md_mem_reg(uct_md, iov[iov_it].buffer, iov_len, 0,
&memh[iov_it]);
if (status != UCS_OK) {
/* unregister previously registered memory */
Expand Down
18 changes: 7 additions & 11 deletions src/ucp/proto/proto_dt.c
Original file line number Diff line number Diff line change
Expand Up @@ -149,28 +149,17 @@ ucs_status_t ucp_dt_reusable_create(uct_ep_h ep, void *buffer, size_t length,
size_t uct_iovcnt = 0;
size_t length_it = 0;

dt_ex->reusable.nc_iov = ucs_malloc(sizeof(uct_iov_t) * uct_iovcnt, "reusable_iov");
if (!dt_ex->reusable.nc_iov) {
return UCS_ERR_NO_MEMORY;
}

switch (datatype & UCP_DATATYPE_CLASS_MASK) {
case UCP_DATATYPE_STRIDE_R:
uct_iovcnt = ucp_dt_count_uct_iov(datatype, 1, buffer, NULL); // TODO: "half-state"?
dt_ex->reusable.length = ucp_dt_stride_copy_uct(dt_ex->reusable.nc_iov,
&dt_ex->reusable.nc_iovcnt, uct_iovcnt, state, buffer, datatype, length);
break;

case UCP_DATATYPE_IOV_R:
iov_it = buffer;
while (length_it < length) {
length_it += ucp_dt_length(iov_it->dt, iov_it->count, iov_it->buffer, NULL);
uct_iovcnt += ucp_dt_count_uct_iov(iov_it->dt, iov_it->count, iov_it->buffer, NULL);
iov_it++;
}

dt_ex->reusable.length = ucp_dt_iov_copy_uct(dt_ex->reusable.nc_iov,
&dt_ex->reusable.nc_iovcnt, uct_iovcnt, state, buffer, datatype, length);
break;

default:
Expand All @@ -179,6 +168,13 @@ ucs_status_t ucp_dt_reusable_create(uct_ep_h ep, void *buffer, size_t length,
return UCS_ERR_INVALID_PARAM;
}

dt_ex->reusable.nc_iov = ucs_malloc(sizeof(uct_iov_t) * uct_iovcnt, "reusable_iov");
if (!dt_ex->reusable.nc_iov) {
return UCS_ERR_NO_MEMORY;
}
dt_ex->reusable.length = ucp_dt_iov_copy_uct(dt_ex->reusable.nc_iov,
&dt_ex->reusable.nc_iovcnt, uct_iovcnt, state, buffer, datatype, length);

dt_ex->reusable.nc_comp.func = ucp_dt_reusable_completion;
return uct_ep_mem_reg_nc(ep, dt_ex->reusable.nc_iov, dt_ex->reusable.nc_iovcnt,
&dt_ex->reusable.nc_md, &dt_ex->reusable.nc_memh, &dt_ex->reusable.nc_comp);
Expand Down

0 comments on commit 1c2a74c

Please sign in to comment.