From 554aaffe3bbd2d4a37409acdf3fb6a62ccf4b479 Mon Sep 17 00:00:00 2001 From: wanghonghui Date: Fri, 11 Jan 2019 18:47:17 +0800 Subject: [PATCH] vhost fix potential memleak in vhost_backend_cleanup dev->mem_table_fds init in vhost_user_set_mem_table but dev->mem may init later in vhost_user_set_vring_addr, so if qemu crash or lost conntion after vhost_user_set_mem_table and before vhost_user_set_vring_addr, it's hugepage memory is not being freed Signed-off-by: Honghui Wang Change-Id: I782c106078829ff6691ed3265a5d1718493de90c Reviewed-on: https://review.gerrithub.io/c/440254 Reviewed-by: Changpeng Liu Reviewed-by: Darek Stojaczyk Tested-by: SPDK CI Jenkins Chandler-Test-Pool: SPDK Automated Test System --- lib/vhost/rte_vhost/vhost_user.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/vhost/rte_vhost/vhost_user.c b/lib/vhost/rte_vhost/vhost_user.c index d530b1386..e73bab8a5 100644 --- a/lib/vhost/rte_vhost/vhost_user.c +++ b/lib/vhost/rte_vhost/vhost_user.c @@ -120,13 +120,13 @@ vhost_backend_cleanup(struct virtio_net *dev) { uint32_t i; - if (dev->mem) { - if (dev->has_new_mem_table) { - for (i = 0; i < dev->mem->nregions; i++) { - close(dev->mem_table_fds[i]); - } - dev->has_new_mem_table = 0; + if (dev->has_new_mem_table) { + for (i = 0; i < dev->mem_table.nregions; i++) { + close(dev->mem_table_fds[i]); } + dev->has_new_mem_table = 0; + } + if (dev->mem) { free_mem_region(dev); rte_free(dev->mem); dev->mem = NULL;