diff options
author | Robin Murphy <robin.murphy@arm.com> | 2023-09-12 17:18:44 +0100 |
---|---|---|
committer | Joerg Roedel <jroedel@suse.de> | 2023-09-25 12:04:38 +0200 |
commit | afad94a93ef12887390d67aa9b6dd6be2657712f (patch) | |
tree | 18fd841c462906f012ce240af755a093e87ecc5b /drivers/iommu | |
parent | bd111e987e762d82dc738232c6ed4b3c9bcc5c91 (diff) | |
download | linux-afad94a93ef12887390d67aa9b6dd6be2657712f.tar.gz linux-afad94a93ef12887390d67aa9b6dd6be2657712f.tar.bz2 linux-afad94a93ef12887390d67aa9b6dd6be2657712f.zip |
iommu: Improve map/unmap sanity checks
The current checks for the __IOMMU_DOMAIN_PAGING capability seem a
bit stifled, since it is quite likely now that a non-paging domain
won't have a pgsize_bitmap and/or mapping ops, and thus get caught
by the earlier condition anyway. Swap them around to test the more
fundamental condition first, then we can reasonably also upgrade
the other to a WARN_ON, since if a driver does ever expose a paging
domain without the means to actually page, it's clearly very broken.
Signed-off-by: Robin Murphy <robin.murphy@arm.com>
Link: https://lore.kernel.org/r/524db1ec0139c964d26928a6a264945aa66d010c.1694525662.git.robin.murphy@arm.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Diffstat (limited to 'drivers/iommu')
-rw-r--r-- | drivers/iommu/iommu.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index 865fa4f179a8..b2d08e422942 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -2519,12 +2519,12 @@ static int __iommu_map(struct iommu_domain *domain, unsigned long iova, phys_addr_t orig_paddr = paddr; int ret = 0; - if (unlikely(!ops->map_pages || domain->pgsize_bitmap == 0UL)) - return -ENODEV; - if (unlikely(!(domain->type & __IOMMU_DOMAIN_PAGING))) return -EINVAL; + if (WARN_ON(!ops->map_pages || domain->pgsize_bitmap == 0UL)) + return -ENODEV; + /* find out the minimum page size supported */ min_pagesz = 1 << __ffs(domain->pgsize_bitmap); @@ -2602,10 +2602,10 @@ static size_t __iommu_unmap(struct iommu_domain *domain, unsigned long orig_iova = iova; unsigned int min_pagesz; - if (unlikely(!ops->unmap_pages || domain->pgsize_bitmap == 0UL)) + if (unlikely(!(domain->type & __IOMMU_DOMAIN_PAGING))) return 0; - if (unlikely(!(domain->type & __IOMMU_DOMAIN_PAGING))) + if (WARN_ON(!ops->unmap_pages || domain->pgsize_bitmap == 0UL)) return 0; /* find out the minimum page size supported */ |