| From 99a7c447a8815e85005afeb3b7a977d4d2f44609 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 2 Jun 2020 14:08:18 +0100 |
| Subject: iommu/iova: Don't BUG on invalid PFNs |
| |
| From: Robin Murphy <robin.murphy@arm.com> |
| |
| [ Upstream commit d3e3d2be688b4b5864538de61e750721a311e4fc ] |
| |
| Unlike the other instances which represent a complete loss of |
| consistency within the rcache mechanism itself, or a fundamental |
| and obvious misconfiguration by an IOMMU driver, the BUG_ON() in |
| iova_magazine_free_pfns() can be provoked at more or less any time |
| in a "spooky action-at-a-distance" manner by any old device driver |
| passing nonsense to dma_unmap_*() which then propagates through to |
| queue_iova(). |
| |
| Not only is this well outside the IOVA layer's control, it's also |
| nowhere near fatal enough to justify panicking anyway - all that |
| really achieves is to make debugging the offending driver more |
| difficult. Let's simply WARN and otherwise ignore bogus PFNs. |
| |
| Reported-by: Prakash Gupta <guptap@codeaurora.org> |
| Signed-off-by: Robin Murphy <robin.murphy@arm.com> |
| Reviewed-by: Prakash Gupta <guptap@codeaurora.org> |
| Link: https://lore.kernel.org/r/acbd2d092b42738a03a21b417ce64e27f8c91c86.1591103298.git.robin.murphy@arm.com |
| Signed-off-by: Joerg Roedel <jroedel@suse.de> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/iommu/iova.c | 4 +++- |
| 1 file changed, 3 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/iommu/iova.c b/drivers/iommu/iova.c |
| index f106fd9782bfb..99c36a5438a75 100644 |
| --- a/drivers/iommu/iova.c |
| +++ b/drivers/iommu/iova.c |
| @@ -676,7 +676,9 @@ iova_magazine_free_pfns(struct iova_magazine *mag, struct iova_domain *iovad) |
| for (i = 0 ; i < mag->size; ++i) { |
| struct iova *iova = private_find_iova(iovad, mag->pfns[i]); |
| |
| - BUG_ON(!iova); |
| + if (WARN_ON(!iova)) |
| + continue; |
| + |
| private_free_iova(iovad, iova); |
| } |
| |
| -- |
| 2.25.1 |
| |