Skip to content

Commit 3db0950

Browse files
committed
handle errors gracefuly to prevent SEGV
oob_allgather_test() do not check isend() call success, leading to the possibility to use oob_req->reqs[] un-initialized upon error and thus to SEGV. Signed-off-by: Bruno Faccini <[email protected]>
1 parent 01da1c4 commit 3db0950

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

ompi/mca/coll/ucc/coll_ucc_module.c

+9-3
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ static ucc_status_t oob_allgather_test(void *req)
150150
size_t msglen = oob_req->msglen;
151151
int probe_count = 5;
152152
int rank, size, sendto, recvfrom, recvdatafrom,
153-
senddatafrom, completed, probe;
153+
senddatafrom, completed, probe, rc;
154154

155155
size = ompi_comm_size(comm);
156156
rank = ompi_comm_rank(comm);
@@ -175,10 +175,14 @@ static ucc_status_t oob_allgather_test(void *req)
175175
senddatafrom = (rank - oob_req->iter + size) % size;
176176
tmprecv = (char*)oob_req->rbuf + (ptrdiff_t)recvdatafrom * (ptrdiff_t)msglen;
177177
tmpsend = (char*)oob_req->rbuf + (ptrdiff_t)senddatafrom * (ptrdiff_t)msglen;
178-
MCA_PML_CALL(isend(tmpsend, msglen, MPI_BYTE, sendto, MCA_COLL_BASE_TAG_UCC,
178+
rc = MCA_PML_CALL(isend(tmpsend, msglen, MPI_BYTE, sendto, MCA_COLL_BASE_TAG_UCC,
179179
MCA_PML_BASE_SEND_STANDARD, comm, &oob_req->reqs[0]));
180-
MCA_PML_CALL(irecv(tmprecv, msglen, MPI_BYTE, recvfrom,
180+
if (rc != OMPI_SUCCESS)
181+
return rc;
182+
rc = MCA_PML_CALL(irecv(tmprecv, msglen, MPI_BYTE, recvfrom,
181183
MCA_COLL_BASE_TAG_UCC, comm, &oob_req->reqs[1]));
184+
if (rc != OMPI_SUCCESS)
185+
return rc;
182186
}
183187
probe = 0;
184188
do {
@@ -206,6 +210,8 @@ static ucc_status_t oob_allgather(void *sbuf, void *rbuf, size_t msglen,
206210
oob_req->msglen = msglen;
207211
oob_req->oob_coll_ctx = oob_coll_ctx;
208212
oob_req->iter = 0;
213+
oob_req->reqs[0] = NULL;
214+
oob_req->reqs[1] = NULL;
209215
*req = oob_req;
210216
return UCC_OK;
211217
}

0 commit comments

Comments
 (0)