iommu/mediatek: Use correct fwspec in mtk_iommu_add_device()
authorJoerg Roedel <jroedel@suse.de>
Wed, 23 Jan 2019 07:46:29 +0000 (08:46 +0100)
committerJoerg Roedel <jroedel@suse.de>
Wed, 23 Jan 2019 12:51:05 +0000 (13:51 +0100)
The mtk_iommu_add_device() function keeps the fwspec in an
on-stack pointer and calls mtk_iommu_create_mapping(), which
might change its source, dev->iommu_fwspec. This causes the
on-stack pointer to be obsoleted and the device
initialization to fail. Update the on-stack fwspec pointer
after mtk_iommu_create_mapping() has been called.

Reported-by: Frank Wunderlich <frank-w@public-files.de>
Fixes: a9bf2eec5a6f ('iommu/mediatek: Use helper functions to access dev->iommu_fwspec')
Tested-by: Frank Wunderlich <frank-w@public-files.de>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/mtk_iommu_v1.c

index 6ede4286b835a93c61906605bf7a46f2c2297cbd..f60bdb85c4c0487e87f0cfb2d92aae736fa0ed53 100644 (file)
@@ -442,6 +442,10 @@ static int mtk_iommu_add_device(struct device *dev)
                iommu_spec.args_count = count;
 
                mtk_iommu_create_mapping(dev, &iommu_spec);
+
+               /* dev->iommu_fwspec might have changed */
+               fwspec = dev_iommu_fwspec_get(dev);
+
                of_node_put(iommu_spec.np);
        }