All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 2/9] KVM: PPC: Book3S HV: radix clear pte when unmapping
@ 2018-05-09  2:20 Nicholas Piggin
  2018-05-17  0:13 ` Paul Mackerras
  0 siblings, 1 reply; 2+ messages in thread
From: Nicholas Piggin @ 2018-05-09  2:20 UTC (permalink / raw)
  To: kvm-ppc

The current partition table unmap code clears the _PAGE_PRESENT bit
out of the pte, which leaves pud_huge/pmd_huge true and does not
clear pud_present/pmd_present. This can confuse subsequent page
faults.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
 arch/powerpc/kvm/book3s_64_mmu_radix.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/powerpc/kvm/book3s_64_mmu_radix.c b/arch/powerpc/kvm/book3s_64_mmu_radix.c
index a6870288c0e0..361f42c8c73e 100644
--- a/arch/powerpc/kvm/book3s_64_mmu_radix.c
+++ b/arch/powerpc/kvm/book3s_64_mmu_radix.c
@@ -584,7 +584,7 @@ int kvm_unmap_radix(struct kvm *kvm, struct kvm_memory_slot *memslot,
 
 	ptep = __find_linux_pte(kvm->arch.pgtable, gpa, NULL, &shift);
 	if (ptep && pte_present(*ptep)) {
-		old = kvmppc_radix_update_pte(kvm, ptep, _PAGE_PRESENT, 0,
+		old = kvmppc_radix_update_pte(kvm, ptep, ~0UL, 0,
 					      gpa, shift);
 		kvmppc_radix_tlbie_page(kvm, gpa, shift);
 		if ((old & _PAGE_DIRTY) && memslot->dirty_bitmap) {
-- 
2.17.0


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH v2 2/9] KVM: PPC: Book3S HV: radix clear pte when unmapping
  2018-05-09  2:20 [PATCH v2 2/9] KVM: PPC: Book3S HV: radix clear pte when unmapping Nicholas Piggin
@ 2018-05-17  0:13 ` Paul Mackerras
  0 siblings, 0 replies; 2+ messages in thread
From: Paul Mackerras @ 2018-05-17  0:13 UTC (permalink / raw)
  To: kvm-ppc

On Wed, May 09, 2018 at 12:20:15PM +1000, Nicholas Piggin wrote:
> The current partition table unmap code clears the _PAGE_PRESENT bit
> out of the pte, which leaves pud_huge/pmd_huge true and does not
> clear pud_present/pmd_present. This can confuse subsequent page
> faults.
> 
> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
> ---
>  arch/powerpc/kvm/book3s_64_mmu_radix.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/arch/powerpc/kvm/book3s_64_mmu_radix.c b/arch/powerpc/kvm/book3s_64_mmu_radix.c
> index a6870288c0e0..361f42c8c73e 100644
> --- a/arch/powerpc/kvm/book3s_64_mmu_radix.c
> +++ b/arch/powerpc/kvm/book3s_64_mmu_radix.c
> @@ -584,7 +584,7 @@ int kvm_unmap_radix(struct kvm *kvm, struct kvm_memory_slot *memslot,
>  
>  	ptep = __find_linux_pte(kvm->arch.pgtable, gpa, NULL, &shift);
>  	if (ptep && pte_present(*ptep)) {
> -		old = kvmppc_radix_update_pte(kvm, ptep, _PAGE_PRESENT, 0,
> +		old = kvmppc_radix_update_pte(kvm, ptep, ~0UL, 0,
>  					      gpa, shift);
>  		kvmppc_radix_tlbie_page(kvm, gpa, shift);
>  		if ((old & _PAGE_DIRTY) && memslot->dirty_bitmap) {

Have you seen this bug triggered in real life, or do you think it
could plausibly be triggered, with the rest of the code as it is?
I'm trying to work out whether this needs to go in 4.17 and to the
stable trees or not.  Could this cause a guest lockup in the case of a
THP split, for instance?

Thanks,
Paul.

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2018-05-17  0:13 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-09  2:20 [PATCH v2 2/9] KVM: PPC: Book3S HV: radix clear pte when unmapping Nicholas Piggin
2018-05-17  0:13 ` Paul Mackerras

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.