vhost: fix guest/host physical address mapping

When reg_size < page_size the function read in
rte_mem_virt2phy would not return, because
host_user_addr is invalid.

Fixes: e246896178 ("vhost: get guest/host physical address mappings")
Cc: stable@dpdk.org

Signed-off-by: Haifeng Lin <haifeng.lin@huawei.com>
Acked-by: Yuanhan Liu <yuanhan.liu@linux.intel.com>
This commit is contained in:
Haifeng Lin 2016-12-01 19:42:02 +08:00 committed by Yuanhan Liu
parent 1feda4d8fc
commit 8c33fc10f6

View File

@ -447,14 +447,14 @@ add_guest_pages(struct virtio_net *dev, struct virtio_memory_region *reg,
reg_size -= size;
while (reg_size > 0) {
size = RTE_MIN(reg_size, page_size);
host_phys_addr = rte_mem_virt2phy((void *)(uintptr_t)
host_user_addr);
add_one_guest_page(dev, guest_phys_addr, host_phys_addr,
page_size);
add_one_guest_page(dev, guest_phys_addr, host_phys_addr, size);
host_user_addr += page_size;
guest_phys_addr += page_size;
reg_size -= page_size;
host_user_addr += size;
guest_phys_addr += size;
reg_size -= size;
}
}