]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
KVM: arm64: Ensure level is always initialized when relaxing perms
authorOliver Upton <oupton@kernel.org>
Wed, 1 Jul 2026 23:16:19 +0000 (16:16 -0700)
committerMarc Zyngier <maz@kernel.org>
Mon, 6 Jul 2026 16:17:38 +0000 (17:17 +0100)
stage2_update_leaf_attrs() returns early before writing to @level if the
table walker returned an error. At the same time,
kvm_pgtable_stage2_relax_perms() uses the level as a TLBI TTL hint when the
error was EAGAIN, indicating the vCPU raced with a table update and the TLB
entry it hit is now stale.

Fall back to an unknown TTL if none was provided by the walk.

Cc: stable@vger.kernel.org
Fixes: be097997a273 ("KVM: arm64: Always invalidate TLB for stage-2 permission faults")
Signed-off-by: Oliver Upton <oupton@kernel.org>
Reviewed-by: Wei-Lin Chang <weilin.chang@arm.com>
Link: https://patch.msgid.link/20260701231620.3300204-2-oupton@kernel.org
Signed-off-by: Marc Zyngier <maz@kernel.org>
arch/arm64/kvm/hyp/pgtable.c

index 0c1defa5fb0ff81c153e58b4f0e80e60309b1c04..386a7468136a2259479f3a6d03e8ba08b69c2fb2 100644 (file)
@@ -1356,7 +1356,7 @@ int kvm_pgtable_stage2_relax_perms(struct kvm_pgtable *pgt, u64 addr,
                                   enum kvm_pgtable_prot prot, enum kvm_pgtable_walk_flags flags)
 {
        kvm_pte_t xn = 0, set = 0, clr = 0;
-       s8 level;
+       s8 level = TLBI_TTL_UNKNOWN;
        int ret;
 
        if (prot & KVM_PTE_LEAF_ATTR_HI_SW)