diff --git a/arch/arm64/kvm/hyp/nvhe/mem_protect.c b/arch/arm64/kvm/hyp/nvhe/mem_protect.c index d0e59fbc75bc..53cc9b80b93d 100644 --- a/arch/arm64/kvm/hyp/nvhe/mem_protect.c +++ b/arch/arm64/kvm/hyp/nvhe/mem_protect.c @@ -897,13 +897,17 @@ static enum pkvm_page_state host_get_page_state(kvm_pte_t pte) { enum pkvm_page_state state = 0; enum kvm_pgtable_prot prot; + phys_addr_t phys; if (!kvm_pte_valid(pte) && pte) return PKVM_NOPAGE; prot = kvm_pgtable_stage2_pte_prot(pte); - if (kvm_pte_valid(pte) && ((prot & KVM_PGTABLE_PROT_RWX) != PKVM_HOST_MEM_PROT)) - state = PKVM_PAGE_RESTRICTED_PROT; + if (kvm_pte_valid(pte)) { + phys = kvm_pte_to_phys(pte); + if ((prot & KVM_PGTABLE_PROT_RWX) != default_host_prot(addr_is_memory(phys))) + state = PKVM_PAGE_RESTRICTED_PROT; + } return state | pkvm_getstate(prot); }