From c92fde7c799c820802022d4e73e71c9247fbd618 Mon Sep 17 00:00:00 2001 From: Will Deacon Date: Thu, 7 Jul 2022 15:49:20 +0100 Subject: [PATCH] Revert "ANDROID: KVM: arm64: pkvm: Prevent the donation of no-map pages" This reverts commit 2270e9af6bd30e6c63b3d3a27812a7c597ad5281. Bug: 233587962 Signed-off-by: Will Deacon Change-Id: I2eccd8ae8d15721e75334ead675a8c27235a5865 --- arch/arm64/kvm/hyp/nvhe/mem_protect.c | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/arch/arm64/kvm/hyp/nvhe/mem_protect.c b/arch/arm64/kvm/hyp/nvhe/mem_protect.c index 25b30cc98c55..88293c4e9f3a 100644 --- a/arch/arm64/kvm/hyp/nvhe/mem_protect.c +++ b/arch/arm64/kvm/hyp/nvhe/mem_protect.c @@ -382,7 +382,7 @@ struct kvm_mem_range { u64 end; }; -static struct memblock_region *find_mem_range(phys_addr_t addr, struct kvm_mem_range *range) +static bool find_mem_range(phys_addr_t addr, struct kvm_mem_range *range) { int cur, left = 0, right = hyp_memblock_nr; struct memblock_region *reg; @@ -405,28 +405,18 @@ static struct memblock_region *find_mem_range(phys_addr_t addr, struct kvm_mem_r } else { range->start = reg->base; range->end = end; - return reg; + return true; } } - return NULL; + return false; } bool addr_is_memory(phys_addr_t phys) { struct kvm_mem_range range; - return !!find_mem_range(phys, &range); -} - -static bool addr_is_allowed_memory(phys_addr_t phys) -{ - struct memblock_region *reg; - struct kvm_mem_range range; - - reg = find_mem_range(phys, &range); - - return reg && !(reg->flags & MEMBLOCK_NOMAP); + return find_mem_range(phys, &range); } static bool is_in_mem_range(u64 addr, struct kvm_mem_range *range) @@ -565,7 +555,7 @@ static bool host_stage2_force_pte_cb(u64 addr, u64 end, enum kvm_pgtable_prot pr static int host_stage2_idmap(u64 addr) { struct kvm_mem_range range; - bool is_memory = !!find_mem_range(addr, &range); + bool is_memory = find_mem_range(addr, &range); enum kvm_pgtable_prot prot; int ret; @@ -735,7 +725,7 @@ static int __check_page_state_visitor(u64 addr, u64 end, u32 level, struct check_walk_data *d = arg; kvm_pte_t pte = *ptep; - if (kvm_pte_valid(pte) && !addr_is_allowed_memory(kvm_pte_to_phys(pte))) + if (kvm_pte_valid(pte) && !addr_is_memory(kvm_pte_to_phys(pte))) return -EINVAL; return d->get_page_state(pte) == d->desired ? 0 : -EPERM; @@ -1130,7 +1120,7 @@ static int __guest_request_page_transition(u64 *completer_addr, return -EINVAL; phys = kvm_pte_to_phys(pte); - if (!addr_is_allowed_memory(phys)) + if (!addr_is_memory(phys)) return -EINVAL; return __guest_get_completer_addr(completer_addr, phys, tx);