| From 5cfff40b090b254d92fa07c820f1beebaf9d23d2 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 12 Jun 2019 14:52:03 -0700 |
| Subject: iommu/amd: Make iommu_disable safer |
| |
| From: Kevin Mitchell <kevmitch@arista.com> |
| |
| [ Upstream commit 3ddbe913e55516d3e2165d43d4d5570761769878 ] |
| |
| Make it safe to call iommu_disable during early init error conditions |
| before mmio_base is set, but after the struct amd_iommu has been added |
| to the amd_iommu_list. For example, this happens if firmware fails to |
| fill in mmio_phys in the ACPI table leading to a NULL pointer |
| dereference in iommu_feature_disable. |
| |
| Fixes: 2c0ae1720c09c ('iommu/amd: Convert iommu initialization to state machine') |
| Signed-off-by: Kevin Mitchell <kevmitch@arista.com> |
| Signed-off-by: Joerg Roedel <jroedel@suse.de> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/iommu/amd_iommu_init.c | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c |
| index 9bb8d64b6f947..c113e46fdc3ab 100644 |
| --- a/drivers/iommu/amd_iommu_init.c |
| +++ b/drivers/iommu/amd_iommu_init.c |
| @@ -383,6 +383,9 @@ static void iommu_enable(struct amd_iommu *iommu) |
| |
| static void iommu_disable(struct amd_iommu *iommu) |
| { |
| + if (!iommu->mmio_base) |
| + return; |
| + |
| /* Disable command buffer */ |
| iommu_feature_disable(iommu, CONTROL_CMDBUF_EN); |
| |
| -- |
| 2.20.1 |
| |