summaryrefslogtreecommitdiffstats
path: root/drivers/xen/xenbus/xenbus_client.c
diff options
context:
space:
mode:
authorJulien Grall <julien.grall@citrix.com>2015-08-10 19:10:38 +0100
committerDavid Vrabel <david.vrabel@citrix.com>2015-08-11 11:05:58 +0100
commitc22fe519e7e2b94ad173e0ea3b89c1a7d8be8d00 (patch)
treee93375e27bd4cc47c02b1ee2e8961a990ba48f8f /drivers/xen/xenbus/xenbus_client.c
parentad6cd7bafcd2c812ba4200d5938e07304f1e2fcd (diff)
downloadlinux-c22fe519e7e2b94ad173e0ea3b89c1a7d8be8d00.tar.gz
linux-c22fe519e7e2b94ad173e0ea3b89c1a7d8be8d00.tar.bz2
linux-c22fe519e7e2b94ad173e0ea3b89c1a7d8be8d00.zip
xen/xenbus: Don't leak memory when unmapping the ring on HVM backend
The commit ccc9d90a9a8b5c4ad7e9708ec41f75ff9e98d61d "xenbus_client: Extend interface to support multi-page ring" removes the call to free_xenballooned_pages() in xenbus_unmap_ring_vfree_hvm(), leaking a page for every shared ring. Only with backends running in HVM domains were affected. Signed-off-by: Julien Grall <julien.grall@citrix.com> Cc: <stable@vger.kernel.org> Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> Reviewed-by: Wei Liu <wei.liu2@citrix.com> Signed-off-by: David Vrabel <david.vrabel@citrix.com>
Diffstat (limited to 'drivers/xen/xenbus/xenbus_client.c')
-rw-r--r--drivers/xen/xenbus/xenbus_client.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/xen/xenbus/xenbus_client.c b/drivers/xen/xenbus/xenbus_client.c
index 9ad327238ba9..e30353575d5d 100644
--- a/drivers/xen/xenbus/xenbus_client.c
+++ b/drivers/xen/xenbus/xenbus_client.c
@@ -814,8 +814,10 @@ static int xenbus_unmap_ring_vfree_hvm(struct xenbus_device *dev, void *vaddr)
rv = xenbus_unmap_ring(dev, node->handles, node->nr_handles,
addrs);
- if (!rv)
+ if (!rv) {
vunmap(vaddr);
+ free_xenballooned_pages(node->nr_handles, node->hvm.pages);
+ }
else
WARN(1, "Leaking %p, size %u page(s)\n", vaddr,
node->nr_handles);