vhost: fix memory leak on realloc failure
authorTiwei Bie <tiwei.bie@intel.com>
Tue, 15 Jan 2019 07:13:23 +0000 (15:13 +0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 18 Jan 2019 08:47:26 +0000 (09:47 +0100)
When realloc() fails, the original block isn't freed.

Fixes: e246896178e6 ("vhost: get guest/host physical address mappings")
Cc: stable@dpdk.org
Signed-off-by: Tiwei Bie <tiwei.bie@intel.com>
Reviewed-by: Maxime Coquelin <maxime.coquelin@redhat.com>
lib/librte_vhost/vhost_user.c

index f2f3036..78be6cf 100644 (file)
@@ -733,13 +733,16 @@ add_one_guest_page(struct virtio_net *dev, uint64_t guest_phys_addr,
                   uint64_t host_phys_addr, uint64_t size)
 {
        struct guest_page *page, *last_page;
+       struct guest_page *old_pages;
 
        if (dev->nr_guest_pages == dev->max_guest_pages) {
                dev->max_guest_pages *= 2;
+               old_pages = dev->guest_pages;
                dev->guest_pages = realloc(dev->guest_pages,
                                        dev->max_guest_pages * sizeof(*page));
                if (!dev->guest_pages) {
                        RTE_LOG(ERR, VHOST_CONFIG, "cannot realloc guest_pages\n");
+                       free(old_pages);
                        return -1;
                }
        }