iommu: Extend mutex lock scope in iommu_probe_device()
authorLu Baolu <baolu.lu@linux.intel.com>
Mon, 8 Nov 2021 06:13:49 +0000 (14:13 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 27 Jan 2022 10:04:10 +0000 (11:04 +0100)
[ Upstream commit 556f99ac886635e8da15528995f06d1d7028cfca ]

Extend the scope of holding group->mutex so that it can cover the default
domain check/attachment and direct mappings of reserved regions.

Cc: Ashish Mhetre <amhetre@nvidia.com>
Fixes: 211ff31b3d33b ("iommu: Fix race condition during default domain allocation")
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Link: https://lore.kernel.org/r/20211108061349.1985579-1-baolu.lu@linux.intel.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/iommu/iommu.c

index 3303d70..f62fb6a 100644 (file)
@@ -287,11 +287,11 @@ int iommu_probe_device(struct device *dev)
         */
        mutex_lock(&group->mutex);
        iommu_alloc_default_domain(group, dev);
-       mutex_unlock(&group->mutex);
 
        if (group->default_domain) {
                ret = __iommu_attach_device(group->default_domain, dev);
                if (ret) {
+                       mutex_unlock(&group->mutex);
                        iommu_group_put(group);
                        goto err_release;
                }
@@ -299,6 +299,7 @@ int iommu_probe_device(struct device *dev)
 
        iommu_create_device_direct_mappings(group, dev);
 
+       mutex_unlock(&group->mutex);
        iommu_group_put(group);
 
        if (ops->probe_finalize)