iommu/vt-d: Remove BUG_ON in map/unmap()
authorTina Zhang <tina.zhang@intel.com>
Thu, 13 Apr 2023 04:06:43 +0000 (12:06 +0800)
committerJoerg Roedel <jroedel@suse.de>
Thu, 13 Apr 2023 10:05:52 +0000 (12:05 +0200)
Domain map/unmap with invalid parameters shouldn't crash the kernel.
Therefore, using if() replaces the BUG_ON.

Signed-off-by: Tina Zhang <tina.zhang@intel.com>
Link: https://lore.kernel.org/r/20230406065944.2773296-6-tina.zhang@intel.com
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/intel/iommu.c

index f11347a590d7914e562cd3a59b0c089d47a5e094..ab21ef1ddb3cfc9a9ae8c996e4df7676301f5498 100644 (file)
@@ -2159,7 +2159,8 @@ __domain_mapping(struct dmar_domain *domain, unsigned long iov_pfn,
        phys_addr_t pteval;
        u64 attr;
 
-       BUG_ON(!domain_pfn_supported(domain, iov_pfn + nr_pages - 1));
+       if (unlikely(!domain_pfn_supported(domain, iov_pfn + nr_pages - 1)))
+               return -EINVAL;
 
        if ((prot & (DMA_PTE_READ|DMA_PTE_WRITE)) == 0)
                return -EINVAL;
@@ -4314,8 +4315,9 @@ static size_t intel_iommu_unmap(struct iommu_domain *domain,
 
        /* Cope with horrid API which requires us to unmap more than the
           size argument if it happens to be a large-page mapping. */
-       BUG_ON(!pfn_to_dma_pte(dmar_domain, iova >> VTD_PAGE_SHIFT, &level,
-                              GFP_ATOMIC));
+       if (unlikely(!pfn_to_dma_pte(dmar_domain, iova >> VTD_PAGE_SHIFT,
+                                    &level, GFP_ATOMIC)))
+               return 0;
 
        if (size < VTD_PAGE_SIZE << level_to_offset_bits(level))
                size = VTD_PAGE_SIZE << level_to_offset_bits(level);