iommu/arm-smmu: Fix missing unlock on error in arm_smmu_device_group()
authorYang Yingliang <yangyingliang@huawei.com>
Fri, 20 Aug 2021 07:49:49 +0000 (15:49 +0800)
committerJoerg Roedel <jroedel@suse.de>
Fri, 20 Aug 2021 12:35:09 +0000 (14:35 +0200)
Add the missing unlock before return from function arm_smmu_device_group()
in the error handling case.

Fixes: b1a1347912a7 ("iommu/arm-smmu: Fix race condition during iommu_group creation")
Reported-by: Hulk Robot <hulkci@huawei.com>
Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
Acked-by: Will Deacon <will@kernel.org>
Link: https://lore.kernel.org/r/20210820074949.1946576-1-yangyingliang@huawei.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/arm/arm-smmu/arm-smmu.c

index 67b660b0551d5b67d9c48bdaf2b2339ac3f53f68..45b4aedd7ab1c9717177f5b54c01455004b1450e 100644 (file)
@@ -1488,8 +1488,10 @@ static struct iommu_group *arm_smmu_device_group(struct device *dev)
        mutex_lock(&smmu->stream_map_mutex);
        for_each_cfg_sme(cfg, fwspec, i, idx) {
                if (group && smmu->s2crs[idx].group &&
-                   group != smmu->s2crs[idx].group)
+                   group != smmu->s2crs[idx].group) {
+                       mutex_unlock(&smmu->stream_map_mutex);
                        return ERR_PTR(-EINVAL);
+               }
 
                group = smmu->s2crs[idx].group;
        }