[PATCH 2/2] iommu/rockchip: Reject unsupported physical addresses
From: Simon Xue
Date: Tue Aug 25 2026 - 12:14:22 EST
A paddr with bits above the range the hardware can address is silently
truncated, pointing the device at the wrong page. Reject it using
paddr_mask before writing any PTE.
Signed-off-by: Simon Xue <xxm@xxxxxxxxxxxxxx>
---
drivers/iommu/rockchip-iommu.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/iommu/rockchip-iommu.c b/drivers/iommu/rockchip-iommu.c
index 9a5aabb2b9c8..93dde18ce33d 100644
--- a/drivers/iommu/rockchip-iommu.c
+++ b/drivers/iommu/rockchip-iommu.c
@@ -794,6 +794,10 @@ static int rk_iommu_map_iova(struct rk_iommu_domain *rk_domain, u32 *pte_addr,
assert_spin_locked(&rk_domain->dt_lock);
+ /* Reject addresses the hardware cannot support */
+ if ((paddr + size - 1) & ~rk_domain->rk_ops->paddr_mask)
+ return -ERANGE;
+
for (pte_count = 0; pte_count < pte_total; pte_count++) {
u32 pte = pte_addr[pte_count];
--
2.34.1