diff options
author | Robin Murphy <robin.murphy@arm.com> | 2016-11-11 17:59:22 +0000 |
---|---|---|
committer | Joerg Roedel <jroedel@suse.de> | 2016-11-15 12:25:33 +0100 |
commit | e1b44cbe7b5d4d97e43a1476b68e0adc1aa5e383 (patch) | |
tree | 7c283d38914e753d1d65563c9101c2073282b8e8 | |
parent | 13f59a78c6d69a9bf4c8989dd5f3396f54a2fe41 (diff) |
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>
-rw-r--r-- | drivers/iommu/arm-smmu.c | 2 |
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); |