Commit 82678ab2 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'iommu-fixes-v6.5-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu

Pull iommu fixes from Joerg Roedel:

 - Fix a regression causing a crash on sysfs access of iommu-group
   specific files

 - Fix signedness bug in SVA code

* tag 'iommu-fixes-v6.5-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu:
  iommu/sva: Fix signedness bug in iommu_sva_alloc_pasid()
  iommu: Fix crash during syfs iommu_groups/N/type
parents b6e6cc1f c20ecf7b
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -34,8 +34,9 @@ static int iommu_sva_alloc_pasid(struct mm_struct *mm, ioasid_t min, ioasid_t ma
	}

	ret = ida_alloc_range(&iommu_global_pasid_ida, min, max, GFP_KERNEL);
	if (ret < min)
	if (ret < 0)
		goto out;

	mm->pasid = ret;
	ret = 0;
out:
+14 −13
Original line number Diff line number Diff line
@@ -2891,14 +2891,11 @@ static int iommu_setup_default_domain(struct iommu_group *group,
		ret = __iommu_group_set_domain_internal(
			group, dom, IOMMU_SET_DOMAIN_MUST_SUCCEED);
		if (WARN_ON(ret))
			goto out_free;
			goto out_free_old;
	} else {
		ret = __iommu_group_set_domain(group, dom);
		if (ret) {
			iommu_domain_free(dom);
			group->default_domain = old_dom;
			return ret;
		}
		if (ret)
			goto err_restore_def_domain;
	}

	/*
@@ -2911,20 +2908,24 @@ static int iommu_setup_default_domain(struct iommu_group *group,
		for_each_group_device(group, gdev) {
			ret = iommu_create_device_direct_mappings(dom, gdev->dev);
			if (ret)
				goto err_restore;
				goto err_restore_domain;
		}
	}

err_restore:
	if (old_dom) {
out_free_old:
	if (old_dom)
		iommu_domain_free(old_dom);
	return ret;

err_restore_domain:
	if (old_dom)
		__iommu_group_set_domain_internal(
			group, old_dom, IOMMU_SET_DOMAIN_MUST_SUCCEED);
err_restore_def_domain:
	if (old_dom) {
		iommu_domain_free(dom);
		old_dom = NULL;
		group->default_domain = old_dom;
	}
out_free:
	if (old_dom)
		iommu_domain_free(old_dom);
	return ret;
}