Skip to content

Commit

Permalink
Merge tag 'iommu-fixes-v6.5-rc1' of git://git.kernel.org/pub/scm/linu…
Browse files Browse the repository at this point in the history
…x/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
  • Loading branch information
torvalds committed Jul 15, 2023
2 parents b6e6cc1 + c20ecf7 commit 82678ab
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 14 deletions.
3 changes: 2 additions & 1 deletion drivers/iommu/iommu-sva.c
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
27 changes: 14 additions & 13 deletions drivers/iommu/iommu.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

/*
Expand All @@ -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;
}

Expand Down

0 comments on commit 82678ab

Please sign in to comment.