Commit c53fbdb6 authored by Quentin Perret's avatar Quentin Perret Committed by Marc Zyngier
Browse files

KVM: arm64: Improve error handling from check_host_shared_guest()



The check_host_shared_guest() path expects to find a last-level valid
PTE in the guest's stage-2 page-table. However, it checks the PTE's
level before its validity, which makes it hard for callers to figure out
what went wrong.

To make error handling simpler, check the PTE's validity first.

Signed-off-by: default avatarQuentin Perret <qperret@google.com>
Reviewed-by: default avatarOliver Upton <oliver.upton@linux.dev>
Link: https://lore.kernel.org/r/20250207145438.1333475-2-qperret@google.com


Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
parent 0e459810
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -943,10 +943,10 @@ static int __check_host_shared_guest(struct pkvm_hyp_vm *vm, u64 *__phys, u64 ip
	ret = kvm_pgtable_get_leaf(&vm->pgt, ipa, &pte, &level);
	if (ret)
		return ret;
	if (level != KVM_PGTABLE_LAST_LEVEL)
		return -E2BIG;
	if (!kvm_pte_valid(pte))
		return -ENOENT;
	if (level != KVM_PGTABLE_LAST_LEVEL)
		return -E2BIG;

	state = guest_get_page_state(pte, ipa);
	if (state != PKVM_PAGE_SHARED_BORROWED)