ANDROID: KVM: arm64: Don't force pte mappings in [n]VHE guest stage-2
Commitd096d35445
("ANDROID: KVM: arm64: Have different callbacks for PTE manipulation") accidentally forces the use of pte-level mappings for the guest stage-2 page-table when not using pKVM. This confuses user_mem_abort() when the guest takes a permission fault trying to execute from a huge page. Since the fault is reported at the pte-level, we end up handling it as a translation fault by calling kvm_pgtable_stage2_map() which dutifully returns -EAGAIN when it finds the RW PTE. Consequently, the guest appears to hang randomly during boot. Fix the issue by inverting stage2_force_pte_cb() so that the host is in complete control of the mapping granularity of the guest when pKVM is not being used. Cc: Fuad Tabba <tabba@google.com> Cc: Mostafa Saleh <smostafa@google.com> Fixes:d096d35445
("ANDROID: KVM: arm64: Have different callbacks for PTE manipulation") Signed-off-by: Will Deacon <willdeacon@google.com> Bug: 222044487 Change-Id: Ideab281ae6d1d5c0fd29fba03ad8ed1cae521a1e
This commit is contained in:
parent
2f2c035453
commit
6625133137
@ -701,7 +701,7 @@ static int get_user_mapping_size(struct kvm *kvm, u64 addr)
|
||||
|
||||
static bool stage2_force_pte_cb(u64 addr, u64 end, enum kvm_pgtable_prot prot)
|
||||
{
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
static bool stage2_pte_is_counted(kvm_pte_t pte, u32 level)
|
||||
|
Loading…
Reference in New Issue
Block a user