{
        /* Caller must be a probed driver on dev */
        struct iommu_group *group = dev->iommu_group;
+       struct group_device *device;
        void *curr;
        int ret;
 
        if (!group)
                return -ENODEV;
 
-       if (!dev_has_iommu(dev) || dev_iommu_ops(dev) != domain->owner)
+       if (!dev_has_iommu(dev) || dev_iommu_ops(dev) != domain->owner ||
+           pasid == IOMMU_NO_PASID)
                return -EINVAL;
 
        mutex_lock(&group->mutex);
+       for_each_group_device(group, device) {
+               if (pasid >= device->dev->iommu->max_pasids) {
+                       ret = -EINVAL;
+                       goto out_unlock;
+               }
+       }
+
        curr = xa_cmpxchg(&group->pasid_array, pasid, NULL, domain, GFP_KERNEL);
        if (curr) {
                ret = xa_err(curr) ? : -EBUSY;