iommu/amd: Test for PAGING domains before freeing a domain
authorJason Gunthorpe <jgg@nvidia.com>
Tue, 10 Sep 2024 20:00:34 +0000 (17:00 -0300)
committerJoerg Roedel <jroedel@suse.de>
Thu, 12 Sep 2024 07:21:40 +0000 (09:21 +0200)
This domain free function can be called for IDENTITY and SVA domains too,
and they don't have page tables. For now protect against this by checking
the type. Eventually the different types should have their own free
functions.

Fixes: 485534bfccb2 ("iommu/amd: Remove conditions from domain free paths")
Reported-by: Vasant Hegde <vasant.hegde@amd.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Reviewed-by: Vasant Hegde <vasant.hegde@amd.com>
Link: https://lore.kernel.org/r/0-v1-ad9884ee5f5b+da-amd_iopgtbl_fix_jgg@nvidia.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/amd/iommu.c

index 2876ac42ae2d44aa226f9fe009b91a106079b309..f4dfabb3e14d37f17dccd28399f0c0c95f3a09d2 100644 (file)
@@ -2254,7 +2254,8 @@ static void cleanup_domain(struct protection_domain *domain)
 void protection_domain_free(struct protection_domain *domain)
 {
        WARN_ON(!list_empty(&domain->dev_list));
-       free_io_pgtable_ops(&domain->iop.pgtbl.ops);
+       if (domain->domain.type & __IOMMU_DOMAIN_PAGING)
+               free_io_pgtable_ops(&domain->iop.pgtbl.ops);
        domain_id_free(domain->id);
        kfree(domain);
 }