[PATCH] KVM: arm64: Fix range alignment when walking page tables

From: Jia He
Date: Tue Mar 02 2021 - 21:42:25 EST


When walking the page tables at a given level, and if the start
address for the range isn't aligned for that level, we propagate
the misalignment on each iteration at that level.

This results in the walker ignoring a number of entries (depending
on the original misalignment) on each subsequent iteration.

Properly aligning the address at the before the next iteration
addresses the issue.

Cc: stable@xxxxxxxxxxxxxxx
Reported-by: Howard Zhang <Howard.Zhang@xxxxxxx>
Signed-off-by: Jia He <justin.he@xxxxxxx>
Fixes: b1e57de62cfb ("KVM: arm64: Add stand-alone page-table walker infrastructure")
[maz: rewrite commit message]
Signed-off-by: Marc Zyngier <maz@xxxxxxxxxx>
Link: https://lore.kernel.org/r/20210303024225.2591-1-justin.he@xxxxxxx
---
arch/arm64/kvm/hyp/pgtable.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm64/kvm/hyp/pgtable.c b/arch/arm64/kvm/hyp/pgtable.c
index 4d177ce1d536..124cd2f93020 100644
--- a/arch/arm64/kvm/hyp/pgtable.c
+++ b/arch/arm64/kvm/hyp/pgtable.c
@@ -223,7 +223,7 @@ static inline int __kvm_pgtable_visit(struct kvm_pgtable_walk_data *data,
goto out;

if (!table) {
- data->addr += kvm_granule_size(level);
+ data->addr = ALIGN(data->addr, kvm_granule_size(level));
goto out;
}

--
2.30.0


--
Without deviation from the norm, progress is not possible.