aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/iommu
diff options
context:
space:
mode:
authorRobin Murphy <robin.murphy@arm.com>2016-11-11 17:59:22 +0000
committerJoerg Roedel <jroedel@suse.de>2016-11-15 12:25:33 +0100
commite1b44cbe7b5d4d97e43a1476b68e0adc1aa5e383 (patch)
tree7c283d38914e753d1d65563c9101c2073282b8e8 /drivers/iommu
parentiommu: Allow taking a reference on a group directly (diff)
downloadlinux-dev-e1b44cbe7b5d4d97e43a1476b68e0adc1aa5e383.tar.xz
linux-dev-e1b44cbe7b5d4d97e43a1476b68e0adc1aa5e383.zip
iommu/arm-smmu: Fix group refcounting
When arm_smmu_device_group() finds an existing group due to Stream ID aliasing, it should be taking an additional reference on that group. Otherwise, the caller of iommu_group_get_for_dev() will inadvertently remove the reference taken by iommu_group_add_device(), and the group will be freed prematurely if any device is removed. Reported-by: Sricharan R <sricharan@codeaurora.org> Signed-off-by: Robin Murphy <robin.murphy@arm.com> Signed-off-by: Joerg Roedel <jroedel@suse.de>
Diffstat (limited to 'drivers/iommu')
-rw-r--r--drivers/iommu/arm-smmu.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c
index c841eb7a1a74..b85fa2471738 100644
--- a/drivers/iommu/arm-smmu.c
+++ b/drivers/iommu/arm-smmu.c
@@ -1466,7 +1466,7 @@ static struct iommu_group *arm_smmu_device_group(struct device *dev)
}
if (group)
- return group;
+ return iommu_group_ref_get(group);
if (dev_is_pci(dev))
group = pci_device_group(dev);