[PATCH v2 0/2] RISC-V: KVM: Fix skip of valid pages in gstage ops
| Newsgroups | org.infradead.lists.kvm-riscv,org.infradead.lists.linux-riscv,org.kernel.vger.kvm,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
From: Wu Fei <[email protected]> The current gstage range walker unconditionally advances by 'page_size' when a leaf PTE is not found, e.g. when the range to wp is [0xfffff01fc000, 0xfffff023c000) , if found_leaf of 0xfffff01fc000 returns false and page_size is 2MB, it skips the whole range, but it's possible to have valid entries in [0xfffff0200000, 0xfffff023c000), so only [0xfffff01fc000, 0xfffff0200000) can be skipped safely. Both wp/unamp have the same pattern. dirty_log_test intentionally sets up the unaligned guest physical address, after riscv kvm enabling KVM_DIRTY_LOG_INITIALLY_SET, it's easy to trigger this bug if there is a larger window for guest to write more pages before first collect_dirty_pages. v2: * reformat * drop the patch to dirty_log_test, which is replaced by the one from Sean: https://github.com/kvm-x86/linux/commit/4e0fdd9b0d7d Wu Fei (2): RISC-V: KVM: Fix skip of valid pages in kvm_riscv_gstage_wp_range RISC-V: KVM: Fix skip of valid pages in kvm_riscv_gstage_unmap_range arch/riscv/kvm/gstage.c | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) -- 2.51.0 -- kvm-riscv mailing list [email protected] http://lists.infradead.org/mailman/listinfo/kvm-riscv