Patch "KVM: PPC: Book3S HV: Close race with page faults around memslot flushes" has been added to the 5.4-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    KVM: PPC: Book3S HV: Close race with page faults around memslot flushes

to the 5.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     kvm-ppc-book3s-hv-close-race-with-page-faults-around.patch
and it can be found in the queue-5.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit dc986d581356691417a7d69ea9ca8343ccfbca58
Author: Paul Mackerras <paulus@xxxxxxxxxx>
Date:   Thu May 28 10:56:42 2020 +1000

    KVM: PPC: Book3S HV: Close race with page faults around memslot flushes
    
    [ Upstream commit 11362b1befeadaae4d159a8cddcdaf6b8afe08f9 ]
    
    There is a potential race condition between hypervisor page faults
    and flushing a memslot.  It is possible for a page fault to read the
    memslot before a memslot is updated and then write a PTE to the
    partition-scoped page tables after kvmppc_radix_flush_memslot has
    completed.  (Note that this race has never been explicitly observed.)
    
    To close this race, it is sufficient to increment the MMU sequence
    number while the kvm->mmu_lock is held.  That will cause
    mmu_notifier_retry() to return true, and the page fault will then
    return to the guest without inserting a PTE.
    
    Signed-off-by: Paul Mackerras <paulus@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/powerpc/kvm/book3s_64_mmu_radix.c b/arch/powerpc/kvm/book3s_64_mmu_radix.c
index da8375437d161..9d73448354698 100644
--- a/arch/powerpc/kvm/book3s_64_mmu_radix.c
+++ b/arch/powerpc/kvm/book3s_64_mmu_radix.c
@@ -1104,6 +1104,11 @@ void kvmppc_radix_flush_memslot(struct kvm *kvm,
 					 kvm->arch.lpid);
 		gpa += PAGE_SIZE;
 	}
+	/*
+	 * Increase the mmu notifier sequence number to prevent any page
+	 * fault that read the memslot earlier from writing a PTE.
+	 */
+	kvm->mmu_notifier_seq++;
 	spin_unlock(&kvm->mmu_lock);
 }
 



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux