Skip to content

Commit 6447da7

Browse files
authored
Merge pull request open-mpi#13408 from hjelmn/fix_pml_ob1_bug_where_pending_packets_can_have_incorrect_header_sizes
Fix bug in MCA_PML_OB1_ADD_ACK_TO_PENDING that causes memory overruns…
2 parents 3af7bb8 + 48490b9 commit 6447da7

File tree

1 file changed

+16
-18
lines changed

1 file changed

+16
-18
lines changed

ompi/mca/pml/ob1/pml_ob1_recvreq.h

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -407,23 +407,21 @@ static inline void mca_pml_ob1_recv_request_schedule(
407407
(void)mca_pml_ob1_recv_request_schedule_exclusive(req, start_bml_btl);
408408
}
409409

410-
#define MCA_PML_OB1_ADD_ACK_TO_PENDING(P, S, D, O, Sz) \
411-
do { \
412-
mca_pml_ob1_pckt_pending_t *_pckt; \
413-
\
414-
MCA_PML_OB1_PCKT_PENDING_ALLOC(_pckt); \
415-
_pckt->hdr.hdr_common.hdr_type = MCA_PML_OB1_HDR_TYPE_ACK; \
416-
_pckt->hdr.hdr_ack.hdr_src_req.lval = (S); \
417-
_pckt->hdr.hdr_ack.hdr_dst_req.pval = (D); \
418-
_pckt->hdr.hdr_ack.hdr_send_offset = (O); \
419-
_pckt->hdr.hdr_ack.hdr_send_size = (Sz); \
420-
_pckt->proc = (P); \
421-
_pckt->bml_btl = NULL; \
422-
OPAL_THREAD_LOCK(&mca_pml_ob1.lock); \
423-
opal_list_append(&mca_pml_ob1.pckt_pending, \
424-
(opal_list_item_t*)_pckt); \
425-
OPAL_THREAD_UNLOCK(&mca_pml_ob1.lock); \
426-
} while(0)
410+
static inline void mca_pml_ob1_add_ack_to_pending(ompi_proc_t *proc, uintptr_t src_req, void *dst_req,
411+
uint64_t send_offset, uint64_t send_size) {
412+
mca_pml_ob1_hdr_t hdr = {
413+
.hdr_ack = {
414+
.hdr_common = { .hdr_type = MCA_PML_OB1_HDR_TYPE_ACK },
415+
.hdr_src_req = { .lval = src_req },
416+
.hdr_dst_req = { .pval = dst_req },
417+
.hdr_send_offset = send_offset,
418+
.hdr_send_size = send_size,
419+
},
420+
};
421+
422+
mca_pml_ob1_add_to_pending(proc, /*bml_btl=*/NULL, /*order=*/0,
423+
&hdr, sizeof(hdr.hdr_ack));
424+
}
427425

428426
int mca_pml_ob1_recv_request_ack_send_btl(ompi_proc_t* proc,
429427
mca_bml_base_btl_t* bml_btl, uint64_t hdr_src_req, void *hdr_dst_req,
@@ -455,7 +453,7 @@ mca_pml_ob1_recv_request_ack_send(mca_btl_base_module_t* btl,
455453
}
456454
}
457455

458-
MCA_PML_OB1_ADD_ACK_TO_PENDING(proc, hdr_src_req, hdr_dst_req,
456+
mca_pml_ob1_add_ack_to_pending(proc, hdr_src_req, hdr_dst_req,
459457
hdr_send_offset, size);
460458

461459
return OMPI_ERR_OUT_OF_RESOURCE;

0 commit comments

Comments
 (0)