summaryrefslogtreecommitdiffstats
path: root/drivers/iommu/arm
diff options
context:
space:
mode:
authorWill Deacon <will@kernel.org>2021-06-15 20:35:46 +0200
committerWill Deacon <will@kernel.org>2021-06-15 20:35:46 +0200
commitb472191f0a0ce6d98d61e939118cfd6ad0ff91e7 (patch)
treeabc8e385b1ad2add51396f9699f6a9610e5669fd /drivers/iommu/arm
parentiommu/arm-smmu: Implement ->probe_finalize() (diff)
downloadlinux-b472191f0a0ce6d98d61e939118cfd6ad0ff91e7.tar.xz
linux-b472191f0a0ce6d98d61e939118cfd6ad0ff91e7.zip
iommu/arm-smmu: Check smmu->impl pointer before dereferencing
Commit 0d97174aeadf ("iommu/arm-smmu: Implement ->probe_finalize()") added a new optional ->probe_finalize callback to 'struct arm_smmu_impl' but neglected to check that 'smmu->impl' is present prior to checking if the new callback is present. Add the missing check, which avoids dereferencing NULL when probing an SMMU which doesn't require any implementation-specific callbacks: | Unable to handle kernel NULL pointer dereference at virtual address | 0000000000000070 | | Call trace: | arm_smmu_probe_finalize+0x14/0x48 | of_iommu_configure+0xe4/0x1b8 | of_dma_configure_id+0xf8/0x2d8 | pci_dma_configure+0x44/0x88 | really_probe+0xc0/0x3c0 Fixes: 0d97174aeadf ("iommu/arm-smmu: Implement ->probe_finalize()") Reported-by: Marek Szyprowski <m.szyprowski@samsung.com> Signed-off-by: Will Deacon <will@kernel.org>
Diffstat (limited to 'drivers/iommu/arm')
-rw-r--r--drivers/iommu/arm/arm-smmu/arm-smmu.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/iommu/arm/arm-smmu/arm-smmu.c b/drivers/iommu/arm/arm-smmu/arm-smmu.c
index d20ce4d57df2..2fe73a88e500 100644
--- a/drivers/iommu/arm/arm-smmu/arm-smmu.c
+++ b/drivers/iommu/arm/arm-smmu/arm-smmu.c
@@ -1458,7 +1458,7 @@ static void arm_smmu_probe_finalize(struct device *dev)
cfg = dev_iommu_priv_get(dev);
smmu = cfg->smmu;
- if (smmu->impl->probe_finalize)
+ if (smmu->impl && smmu->impl->probe_finalize)
smmu->impl->probe_finalize(smmu, dev);
}