]> git.baikalelectronics.ru Git - kernel.git/commit
KVM: arm/arm64: Clean dcache to PoC when changing PTE due to CoW
authorMarc Zyngier <marc.zyngier@arm.com>
Thu, 23 Aug 2018 08:58:27 +0000 (09:58 +0100)
committerChristoffer Dall <christoffer.dall@arm.com>
Fri, 7 Sep 2018 13:05:40 +0000 (15:05 +0200)
commit4ff01d5cabe7a4de1c34d016cd2ea9e875cd54b9
treea719ce434a91be57e35b5d29e86e1b39c30601de
parentf030a7bb7b1f7de16c1c716a587185e209e25800
KVM: arm/arm64: Clean dcache to PoC when changing PTE due to CoW

When triggering a CoW, we unmap the RO page via an MMU notifier
(invalidate_range_start), and then populate the new PTE using another
one (change_pte). In the meantime, we'll have copied the old page
into the new one.

The problem is that the data for the new page is sitting in the
cache, and should the guest have an uncached mapping to that page
(or its MMU off), following accesses will bypass the cache.

In a way, this is similar to what happens on a translation fault:
We need to clean the page to the PoC before mapping it. So let's just
do that.

This fixes a KVM unit test regression observed on a HiSilicon platform,
and subsequently reproduced on Seattle.

Fixes: 8eb4541cfab2 ("KVM: arm/arm64: Only clean the dcache on translation fault")
Cc: stable@vger.kernel.org # v4.16+
Reported-by: Mike Galbraith <efault@gmx.de>
Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
Signed-off-by: Christoffer Dall <christoffer.dall@arm.com>
virt/kvm/arm/mmu.c