Explorar o código

iommu/mediatek: Fix M4Uv1 group refcounting

For each subsequent device assigned to the m4u_group after its initial
allocation, we need to take an additional reference. 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.

Signed-off-by: Robin Murphy <robin.murphy@arm.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
Robin Murphy %!s(int64=8) %!d(string=hai) anos
pai
achega
5d1d43b0f6
Modificáronse 1 ficheiros con 2 adicións e 0 borrados
  1. 2 0
      drivers/iommu/mtk_iommu_v1.c

+ 2 - 0
drivers/iommu/mtk_iommu_v1.c

@@ -502,6 +502,8 @@ static struct iommu_group *mtk_iommu_device_group(struct device *dev)
 		data->m4u_group = iommu_group_alloc();
 		if (IS_ERR(data->m4u_group))
 			dev_err(dev, "Failed to allocate M4U IOMMU group\n");
+	} else {
+		iommu_group_ref_get(data->m4u_group);
 	}
 	return data->m4u_group;
 }