]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iommu: Make @handle mandatory in iommu_{attach|replace}_group_handle()
authorYi Liu <yi.l.liu@intel.com>
Wed, 26 Feb 2025 01:18:46 +0000 (17:18 -0800)
committerJason Gunthorpe <jgg@nvidia.com>
Fri, 28 Feb 2025 14:07:14 +0000 (10:07 -0400)
Caller of the two APIs always provide a valid handle, make @handle as
mandatory parameter. Take this chance incoporate the handle->domain
set under the protection of group->mutex in iommu_attach_group_handle().

Link: https://patch.msgid.link/r/20250226011849.5102-2-yi.l.liu@intel.com
Reviewed-by: Jason Gunthorpe <jgg@nvidia.com>
Reviewed-by: Nicolin Chen <nicolinc@nvidia.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Reviewed-by: Lu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: Yi Liu <yi.l.liu@intel.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
drivers/iommu/iommu.c

index 022bf96a18c5e43038d07b71cbec0253b41295a3..81189895df37c2e0552869510ab3809ddce8bf39 100644 (file)
@@ -3511,10 +3511,11 @@ int iommu_attach_group_handle(struct iommu_domain *domain,
 {
        int ret;
 
-       if (handle)
-               handle->domain = domain;
+       if (!handle)
+               return -EINVAL;
 
        mutex_lock(&group->mutex);
+       handle->domain = domain;
        ret = xa_insert(&group->pasid_array, IOMMU_NO_PASID, handle, GFP_KERNEL);
        if (ret)
                goto err_unlock;
@@ -3568,16 +3569,14 @@ int iommu_replace_group_handle(struct iommu_group *group,
        void *curr;
        int ret;
 
-       if (!new_domain)
+       if (!new_domain || !handle)
                return -EINVAL;
 
        mutex_lock(&group->mutex);
-       if (handle) {
-               ret = xa_reserve(&group->pasid_array, IOMMU_NO_PASID, GFP_KERNEL);
-               if (ret)
-                       goto err_unlock;
-               handle->domain = new_domain;
-       }
+       handle->domain = new_domain;
+       ret = xa_reserve(&group->pasid_array, IOMMU_NO_PASID, GFP_KERNEL);
+       if (ret)
+               goto err_unlock;
 
        ret = __iommu_group_set_domain(group, new_domain);
        if (ret)