summaryrefslogtreecommitdiffstats
path: root/drivers/iommu
diff options
context:
space:
mode:
authorShunqian Zheng <zhengsq@rock-chips.com>2016-06-23 22:13:28 -0400
committerJoerg Roedel <jroedel@suse.de>2016-06-27 08:50:08 -0400
commit3d08f434bd58656ae630376d0b5afd6ca1ffb013 (patch)
tree564e9d0ac3605264e509630359cd9e09e8bc7d30 /drivers/iommu
parente6d0f4737c468d1889aba06801c490988cf66ad7 (diff)
iommu/rockchip: Fix allocation of bases array in driver probe
In .probe(), devm_kzalloc() is called with size == 0 and works only by luck, due to internal behavior of the allocator and the fact that the proper allocation size is small. Let's use proper value for calculating the size. Fixes: cd6438c5f844 ("iommu/rockchip: Reconstruct to support multi slaves") Signed-off-by: Shunqian Zheng <zhengsq@rock-chips.com> Signed-off-by: Tomasz Figa <tfiga@chromium.org> Reviewed-by: Douglas Anderson <dianders@chromium.org> Signed-off-by: Joerg Roedel <jroedel@suse.de>
Diffstat (limited to 'drivers/iommu')
-rw-r--r--drivers/iommu/rockchip-iommu.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/iommu/rockchip-iommu.c b/drivers/iommu/rockchip-iommu.c
index 53fa0d939c9b..8a5bac7ff0b7 100644
--- a/drivers/iommu/rockchip-iommu.c
+++ b/drivers/iommu/rockchip-iommu.c
@@ -1034,6 +1034,7 @@ static int rk_iommu_probe(struct platform_device *pdev)
1034 struct device *dev = &pdev->dev; 1034 struct device *dev = &pdev->dev;
1035 struct rk_iommu *iommu; 1035 struct rk_iommu *iommu;
1036 struct resource *res; 1036 struct resource *res;
1037 int num_res = pdev->num_resources;
1037 int i; 1038 int i;
1038 1039
1039 iommu = devm_kzalloc(dev, sizeof(*iommu), GFP_KERNEL); 1040 iommu = devm_kzalloc(dev, sizeof(*iommu), GFP_KERNEL);
@@ -1043,12 +1044,13 @@ static int rk_iommu_probe(struct platform_device *pdev)
1043 platform_set_drvdata(pdev, iommu); 1044 platform_set_drvdata(pdev, iommu);
1044 iommu->dev = dev; 1045 iommu->dev = dev;
1045 iommu->num_mmu = 0; 1046 iommu->num_mmu = 0;
1046 iommu->bases = devm_kzalloc(dev, sizeof(*iommu->bases) * iommu->num_mmu, 1047
1048 iommu->bases = devm_kzalloc(dev, sizeof(*iommu->bases) * num_res,
1047 GFP_KERNEL); 1049 GFP_KERNEL);
1048 if (!iommu->bases) 1050 if (!iommu->bases)
1049 return -ENOMEM; 1051 return -ENOMEM;
1050 1052
1051 for (i = 0; i < pdev->num_resources; i++) { 1053 for (i = 0; i < num_res; i++) {
1052 res = platform_get_resource(pdev, IORESOURCE_MEM, i); 1054 res = platform_get_resource(pdev, IORESOURCE_MEM, i);
1053 if (!res) 1055 if (!res)
1054 continue; 1056 continue;