diff options
author | Xiaoyang Xu <xuxiaoyang2@huawei.com> | 2020-10-16 17:35:58 +0800 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2020-10-29 09:57:56 +0100 |
commit | b4035b3d64b650543c11daee6b9b9dd13fbc5bd4 (patch) | |
tree | 759413a6f2244f68d47205b35b3bb4c6ae6788d5 | |
parent | f54d8a9e37b0a51d43e9572501558a0246cc5004 (diff) | |
download | linux-stable-b4035b3d64b650543c11daee6b9b9dd13fbc5bd4.tar.gz linux-stable-b4035b3d64b650543c11daee6b9b9dd13fbc5bd4.tar.bz2 linux-stable-b4035b3d64b650543c11daee6b9b9dd13fbc5bd4.zip |
vfio iommu type1: Fix memory leak in vfio_iommu_type1_pin_pages
[ Upstream commit 2e6cfd496f5b57034cf2aec738799571b5a52124 ]
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: a54eb55045ae ("vfio iommu type1: Add support for mediated devices")
Signed-off-by: Xiaoyang Xu <xuxiaoyang2@huawei.com>
[aw: simplified logic, add Fixes]
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
-rw-r--r-- | drivers/vfio/vfio_iommu_type1.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c index c6220f57fdf3..3b31e83a9215 100644 --- a/drivers/vfio/vfio_iommu_type1.c +++ b/drivers/vfio/vfio_iommu_type1.c @@ -631,7 +631,8 @@ static int vfio_iommu_type1_pin_pages(void *iommu_data, ret = vfio_add_to_pfn_list(dma, iova, phys_pfn[i]); 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; } } |