Re: [PATCH v5 3/7] iommu: Validate that devices match domains

From: Jason Gunthorpe
Date: Tue Oct 24 2023 - 14:52:22 EST


On Wed, Oct 11, 2023 at 07:14:50PM +0100, Robin Murphy wrote:

> @@ -2279,10 +2280,16 @@ struct iommu_domain *iommu_get_dma_domain(struct device *dev)
> static int __iommu_attach_group(struct iommu_domain *domain,
> struct iommu_group *group)
> {
> + struct device *dev;
> +
> if (group->domain && group->domain != group->default_domain &&
> group->domain != group->blocking_domain)
> return -EBUSY;
>
> + dev = iommu_group_first_dev(group);
> + if (!dev_has_iommu(dev) || dev_iommu_ops(dev) != domain->owner)
> + return -EINVAL;

I was thinking about this later, how does this work for the global
static domains? domain->owner will not be set?

if (alloc_type == IOMMU_DOMAIN_IDENTITY && ops->identity_domain)
return ops->identity_domain;
else if (alloc_type == IOMMU_DOMAIN_BLOCKED && ops->blocked_domain)
return ops->blocked_domain;

Seems like it will break everything?

I suggest we just put a simple void * tag in the const domain->ops at
compile time to indicate the owning driver.

Jason