Skip to content

Commit

Permalink
migration/rdma: Fix cm event use after free
Browse files Browse the repository at this point in the history
Signed-off-by: Li Zhijian <[email protected]>
Message-Id: <[email protected]>
Signed-off-by: Dr. David Alan Gilbert <[email protected]>
Reviewed-by: Dr. David Alan Gilbert <[email protected]>
  • Loading branch information
zhijianli88 authored and dagrh committed Jun 8, 2021
1 parent 7de2e85 commit 6b8c2eb
Showing 1 changed file with 8 additions and 3 deletions.
11 changes: 8 additions & 3 deletions migration/rdma.c
Original file line number Diff line number Diff line change
Expand Up @@ -1539,16 +1539,20 @@ static int qemu_rdma_wait_comp_channel(RDMAContext *rdma)

if (pfds[1].revents) {
ret = rdma_get_cm_event(rdma->channel, &cm_event);
if (!ret) {
rdma_ack_cm_event(cm_event);
if (ret) {
error_report("failed to get cm event while wait "
"completion channel");
return -EPIPE;
}

error_report("receive cm event while wait comp channel,"
"cm event is %d", cm_event->event);
if (cm_event->event == RDMA_CM_EVENT_DISCONNECTED ||
cm_event->event == RDMA_CM_EVENT_DEVICE_REMOVAL) {
rdma_ack_cm_event(cm_event);
return -EPIPE;
}
rdma_ack_cm_event(cm_event);
}
break;

Expand Down Expand Up @@ -3285,7 +3289,6 @@ static void rdma_cm_poll_handler(void *opaque)
error_report("get_cm_event failed %d", errno);
return;
}
rdma_ack_cm_event(cm_event);

if (cm_event->event == RDMA_CM_EVENT_DISCONNECTED ||
cm_event->event == RDMA_CM_EVENT_DEVICE_REMOVAL) {
Expand All @@ -3298,12 +3301,14 @@ static void rdma_cm_poll_handler(void *opaque)
rdma->return_path->error_state = -EPIPE;
}
}
rdma_ack_cm_event(cm_event);

if (mis->migration_incoming_co) {
qemu_coroutine_enter(mis->migration_incoming_co);
}
return;
}
rdma_ack_cm_event(cm_event);
}

static int qemu_rdma_accept(RDMAContext *rdma)
Expand Down

0 comments on commit 6b8c2eb

Please sign in to comment.