Commit 2e6cfd49 authored by Xiaoyang Xu's avatar Xiaoyang Xu Committed by Alex Williamson

vfio iommu type1: Fix memory leak in vfio_iommu_type1_pin_pages

pfn is not added to pfn_list when vfio_add_to_pfn_list fails.
vfio_unpin_page_external will exit directly without calling
vfio_iova_put_vfio_pfn.  This will lead to a memory leak.

Fixes: a54eb550 ("vfio iommu type1: Add support for mediated devices")
Signed-off-by: default avatarXiaoyang Xu <xuxiaoyang2@huawei.com>
[aw: simplified logic, add Fixes]
Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
parent 852b1bee
...@@ -693,7 +693,8 @@ static int vfio_iommu_type1_pin_pages(void *iommu_data, ...@@ -693,7 +693,8 @@ static int vfio_iommu_type1_pin_pages(void *iommu_data,
ret = vfio_add_to_pfn_list(dma, iova, phys_pfn[i]); ret = vfio_add_to_pfn_list(dma, iova, phys_pfn[i]);
if (ret) { if (ret) {
vfio_unpin_page_external(dma, iova, do_accounting); if (put_pfn(phys_pfn[i], dma->prot) && do_accounting)
vfio_lock_acct(dma, -1, true);
goto pin_unwind; goto pin_unwind;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment