2022-11-28 22:39:01

by Ricardo Ribalda

[permalink] [raw]
Subject: [PATCH v2] iommu/mediatek: Fix crash on isr after kexec()

If the system is rebooted via isr(), the IRQ handler might be triggerd
before the domain is initialized. Resulting on an invalid memory access
error.

Fix:
[ 0.500930] Unable to handle kernel read from unreadable memory at virtual address 0000000000000070
[ 0.501166] Call trace:
[ 0.501174] report_iommu_fault+0x28/0xfc
[ 0.501180] mtk_iommu_isr+0x10c/0x1c0

Signed-off-by: Ricardo Ribalda <[email protected]>
---
To: Yong Wu <[email protected]>
To: Joerg Roedel <[email protected]>
To: Will Deacon <[email protected]>
To: Robin Murphy <[email protected]>
To: Matthias Brugger <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
---
Changes in v2:
- Also print the error message if !dom (Thanks Yong)
- Link to v1: https://lore.kernel.org/r/[email protected]
---
drivers/iommu/mtk_iommu.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
index 2ab2ecfe01f8..3d913ab5029c 100644
--- a/drivers/iommu/mtk_iommu.c
+++ b/drivers/iommu/mtk_iommu.c
@@ -454,7 +454,7 @@ static irqreturn_t mtk_iommu_isr(int irq, void *dev_id)
fault_larb = data->plat_data->larbid_remap[fault_larb][sub_comm];
}

- if (report_iommu_fault(&dom->domain, bank->parent_dev, fault_iova,
+ if (!dom || report_iommu_fault(&dom->domain, bank->parent_dev, fault_iova,
write ? IOMMU_FAULT_WRITE : IOMMU_FAULT_READ)) {
dev_err_ratelimited(
bank->parent_dev,

---
base-commit: 4312098baf37ee17a8350725e6e0d0e8590252d4
change-id: 20221125-mtk-iommu-13023f971298

Best regards,
--
Ricardo Ribalda <[email protected]>


2022-11-29 12:35:02

by Robin Murphy

[permalink] [raw]
Subject: Re: [PATCH v2] iommu/mediatek: Fix crash on isr after kexec()

On 2022-11-28 22:16, Ricardo Ribalda wrote:
> If the system is rebooted via isr(), the IRQ handler might be triggerd
> before the domain is initialized. Resulting on an invalid memory access
> error.
>
> Fix:
> [ 0.500930] Unable to handle kernel read from unreadable memory at virtual address 0000000000000070
> [ 0.501166] Call trace:
> [ 0.501174] report_iommu_fault+0x28/0xfc
> [ 0.501180] mtk_iommu_isr+0x10c/0x1c0

Reviewed-by: Robin Murphy <[email protected]>

> Signed-off-by: Ricardo Ribalda <[email protected]>
> ---
> To: Yong Wu <[email protected]>
> To: Joerg Roedel <[email protected]>
> To: Will Deacon <[email protected]>
> To: Robin Murphy <[email protected]>
> To: Matthias Brugger <[email protected]>
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> Cc: [email protected]
> ---
> Changes in v2:
> - Also print the error message if !dom (Thanks Yong)
> - Link to v1: https://lore.kernel.org/r/[email protected]
> ---
> drivers/iommu/mtk_iommu.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/iommu/mtk_iommu.c b/drivers/iommu/mtk_iommu.c
> index 2ab2ecfe01f8..3d913ab5029c 100644
> --- a/drivers/iommu/mtk_iommu.c
> +++ b/drivers/iommu/mtk_iommu.c
> @@ -454,7 +454,7 @@ static irqreturn_t mtk_iommu_isr(int irq, void *dev_id)
> fault_larb = data->plat_data->larbid_remap[fault_larb][sub_comm];
> }
>
> - if (report_iommu_fault(&dom->domain, bank->parent_dev, fault_iova,
> + if (!dom || report_iommu_fault(&dom->domain, bank->parent_dev, fault_iova,
> write ? IOMMU_FAULT_WRITE : IOMMU_FAULT_READ)) {
> dev_err_ratelimited(
> bank->parent_dev,
>
> ---
> base-commit: 4312098baf37ee17a8350725e6e0d0e8590252d4
> change-id: 20221125-mtk-iommu-13023f971298
>
> Best regards,

Subject: Re: [PATCH v2] iommu/mediatek: Fix crash on isr after kexec()

Il 28/11/22 23:16, Ricardo Ribalda ha scritto:
> If the system is rebooted via isr(), the IRQ handler might be triggerd
> before the domain is initialized. Resulting on an invalid memory access
> error.
>
> Fix:
> [ 0.500930] Unable to handle kernel read from unreadable memory at virtual address 0000000000000070
> [ 0.501166] Call trace:
> [ 0.501174] report_iommu_fault+0x28/0xfc
> [ 0.501180] mtk_iommu_isr+0x10c/0x1c0
>
> Signed-off-by: Ricardo Ribalda <[email protected]>
> Reviewed-by: Robin Murphy <[email protected]>

Reviewed-by: AngeloGioacchino Del Regno <[email protected]>


2022-12-05 11:01:06

by Joerg Roedel

[permalink] [raw]
Subject: Re: [PATCH v2] iommu/mediatek: Fix crash on isr after kexec()

On Mon, Nov 28, 2022 at 11:16:48PM +0100, Ricardo Ribalda wrote:
> If the system is rebooted via isr(), the IRQ handler might be triggerd
> before the domain is initialized. Resulting on an invalid memory access
> error.
>
> Fix:
> [ 0.500930] Unable to handle kernel read from unreadable memory at virtual address 0000000000000070
> [ 0.501166] Call trace:
> [ 0.501174] report_iommu_fault+0x28/0xfc
> [ 0.501180] mtk_iommu_isr+0x10c/0x1c0
>
> Signed-off-by: Ricardo Ribalda <[email protected]>

Applied with commit-message spelling fix.