From: Isaku Yamahata <yamah...@private.email.ne.jp> resp.len is given from remote host. So should be validated before use. Otherwise memcpy can access beyond the buffer.
Cc: Michael R. Hines <mrhi...@us.ibm.com> Reviewed-by: Orit Wasserman <owass...@redhat.com> Reviewed-by: Michael R. Hines <mrhi...@us.ibm.com> Signed-off-by: Isaku Yamahata <yamah...@private.email.ne.jp> Signed-off-by: Michael R. Hines <mrhi...@us.ibm.com> --- migration-rdma.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/migration-rdma.c b/migration-rdma.c index 3a380d4..6721266 100644 --- a/migration-rdma.c +++ b/migration-rdma.c @@ -3045,10 +3045,6 @@ static int qemu_rdma_registration_stop(QEMUFile *f, void *opaque, return ret; } - qemu_rdma_move_header(rdma, reg_result_idx, &resp); - memcpy(rdma->block, - rdma->wr_data[reg_result_idx].control_curr, resp.len); - nb_remote_blocks = resp.len / sizeof(RDMARemoteBlock); /* @@ -3070,6 +3066,9 @@ static int qemu_rdma_registration_stop(QEMUFile *f, void *opaque, return -EINVAL; } + qemu_rdma_move_header(rdma, reg_result_idx, &resp); + memcpy(rdma->block, + rdma->wr_data[reg_result_idx].control_curr, resp.len); for (i = 0; i < nb_remote_blocks; i++) { network_to_remote_block(&rdma->block[i]); -- 1.7.10.4