When installing a new leaf pte onto an invalid ptep, we need to
get_page(ptep). When just updating a valid leaf ptep, we shouldn't
get_page(ptep). Incorrect page_count of translation tables might 
lead to memory leak, when unmapping a stage 2 memory range.

Signed-off-by: Yanan Wang <wangyana...@huawei.com>
---
 arch/arm64/kvm/hyp/pgtable.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/arm64/kvm/hyp/pgtable.c b/arch/arm64/kvm/hyp/pgtable.c
index 0271b4a3b9fe..b232bdd142a6 100644
--- a/arch/arm64/kvm/hyp/pgtable.c
+++ b/arch/arm64/kvm/hyp/pgtable.c
@@ -470,6 +470,9 @@ static bool stage2_map_walker_try_leaf(u64 addr, u64 end, 
u32 level,
        if (!kvm_block_mapping_supported(addr, end, phys, level))
                return false;
 
+       if (kvm_pte_valid(*ptep))
+               put_page(virt_to_page(ptep));
+
        if (kvm_set_valid_leaf_pte(ptep, phys, data->attr, level))
                goto out;
 
-- 
2.19.1

Reply via email to