iommufd/selftest: Fix page leaks in mock_viommu_{init,destroy}
PATCH 1/1 iommufd/selftest: Fix page leaks in mock_viommu_{init,destroy}
mock_viommu_init() allocates two pages using __get_free_pages(..., 1), but its error path and mock_viommu_destroy() only release the first page using free_page(), leaking the second page. Use free_pages() with the matching order instead to avoid any page leaks.
--- drivers/iommu/iommufd/selftest.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/iommu/iommufd/selftest.c +2 -2
@@ -636,7 +636,7 @@ static void mock_viommu_destroy(struct iommufd_viommu *viommu)if (mock_viommu->mmap_offset)iommufd_viommu_destroy_mmap (&mock_viommu->core, mock_viommu->mmap_offset); -free_page ((unsigned long )mock_viommu->page); +free_pages ((unsigned long )mock_viommu->page,1 );mutex_destroy (&mock_viommu->queue_mutex);/* iommufd core frees mock_viommu and viommu */
@@ -870,7 +870,7 @@ static int mock_viommu_init(struct iommufd_viommu *viommu,iommufd_viommu_destroy_mmap (&mock_viommu->core, mock_viommu->mmap_offset); err_free_page: -free_page ((unsigned long )mock_viommu->page); +free_pages ((unsigned long )mock_viommu->page,1 );return rc; }
Quoted 7 lines · Thorsten Blum
mock_viommu_init()allocates two pages using__get_free_pages(..., 1), but its error path andmock_viommu_destroy()only release the first page usingfree_page(), leaking the second page. Usefree_pages()with the matching order instead to avoid any page leaks.Fixes 80478a2b450e ("iommufd/selftest: Add coverage for the new mmap interface")Signed-off-by Thorsten Blum <[email protected]>
Thanks for the fix. We indeed allocate two pages but free only the first one. I guess we missed that earlier.
Quoted 26 lines
--- drivers/iommu/iommufd/selftest.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)drivers/iommu/iommufd/selftest.c +2
-2@@ -636,7 +636,7 @@ static void mock_viommu_destroy(struct iommufd_viommu *viommu)if (mock_viommu->mmap_offset)iommufd_viommu_destroy_mmap (&mock_viommu->core, mock_viommu->mmap_offset); -free_page ((unsigned long )mock_viommu->page); +free_pages ((unsigned long )mock_viommu->page,1 );mutex_destroy (&mock_viommu->queue_mutex);/* iommufd core frees mock_viommu and viommu */ @@ -870,7 +870,7 @@ static int mock_viommu_init(struct iommufd_viommu *viommu,iommufd_viommu_destroy_mmap (&mock_viommu->core, mock_viommu->mmap_offset); err_free_page: -free_page ((unsigned long )mock_viommu->page); +free_pages ((unsigned long )mock_viommu->page,1 );return rc; }
Quoted 7 lines · Thorsten Blum
mock_viommu_init()allocates two pages using__get_free_pages(..., 1), but its error path andmock_viommu_destroy()only release the first page usingfree_page(), leaking the second page. Usefree_pages()with the matching order instead to avoid any page leaks.Fixes 80478a2b450e ("iommufd/selftest: Add coverage for the new mmap interface")Signed-off-by Thorsten Blum <[email protected]>
Jason Gunthorpe
AppliedQuoted 10 lines · Thorsten Blum
mock_viommu_init()allocates two pages using__get_free_pages(..., 1), but its error path andmock_viommu_destroy()only release the first page usingfree_page(), leaking the second page. Usefree_pages()with the matching order instead to avoid any page leaks.Fixes 80478a2b450e ("iommufd/selftest: Add coverage for the new mmap interface")Signed-off-by Thorsten Blum <[email protected]>--- drivers/iommu/iommufd/selftest.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
Applied, thanks
Jason