linux/arch/powerpc/kvm
Paul Mackerras b4a839009a KVM: PPC: Book3S HV: Fix KSM memory corruption
Testing with KSM active in the host showed occasional corruption of
guest memory.  Typically a page that should have contained zeroes
would contain values that look like the contents of a user process
stack (values such as 0x0000_3fff_xxxx_xxx).

Code inspection in kvmppc_h_protect revealed that there was a race
condition with the possibility of granting write access to a page
which is read-only in the host page tables.  The code attempts to keep
the host mapping read-only if the host userspace PTE is read-only, but
if that PTE had been temporarily made invalid for any reason, the
read-only check would not trigger and the host HPTE could end up
read-write.  Examination of the guest HPT in the failure situation
revealed that there were indeed shared pages which should have been
read-only that were mapped read-write.

To close this race, we don't let a page go from being read-only to
being read-write, as far as the real HPTE mapping the page is
concerned (the guest view can go to read-write, but the actual mapping
stays read-only).  When the guest tries to write to the page, we take
an HDSI and let kvmppc_book3s_hv_page_fault take care of providing a
writable HPTE for the page.

This eliminates the occasional corruption of shared pages
that was previously seen with KSM active.

Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
2014-12-15 13:27:24 +01:00
..
book3s.c Patch queue for ppc - 2014-09-24 2014-09-24 23:19:45 +02:00
book3s.h kvm: Fix page ageing bugs 2014-09-24 14:07:58 +02:00
book3s_32_mmu.c KVM: PPC: Book3S: Stop PTE lookup on write errors 2014-07-28 15:23:10 +02:00
book3s_32_mmu_host.c KVM: PPC: Book3S: Make magic page properly 4k mappable 2014-07-28 15:23:11 +02:00
book3s_32_sr.S
book3s_64_mmu.c KVM: PPC: Disable NX for old magic page using guests 2014-05-30 14:26:24 +02:00
book3s_64_mmu_host.c KVM: PPC: Book3S: Make magic page properly 4k mappable 2014-07-28 15:23:11 +02:00
book3s_64_mmu_hv.c KVM: PPC: Book3S HV: Add missing HPTE unlock 2014-12-15 13:27:23 +01:00
book3s_64_slb.S KVM: PPC: Book3S PR: Rework SLB switching code 2014-05-30 14:26:30 +02:00
book3s_64_vio.c
book3s_64_vio_hv.c KVM: PPC: Book3S: Introduce hypervisor call H_GET_TCE 2014-03-26 23:34:27 +11:00
book3s_emulate.c KVM: PPC: PR: Handle FSCR feature deselects 2014-07-31 10:23:46 +02:00
book3s_exports.c KVM: PPC: Make shared struct aka magic page guest endian 2014-05-30 14:26:21 +02:00
book3s_hv.c KVM: PPC: Book3S HV: Fix an issue where guest is paused on receiving HMI 2014-12-15 13:27:24 +01:00
book3s_hv_builtin.c KVM: PPC: BOOK3S: HV: CMA: Reserve cma region only in hypervisor mode 2014-09-29 15:36:33 +02:00
book3s_hv_interrupts.S powerpc/kvm: Remove redundant save of SIER AND MMCR2 2014-07-11 12:55:07 +10:00
book3s_hv_ras.c KVM: PPC: Book3S HV: Access guest VPA in BE 2014-07-28 15:22:22 +02:00
book3s_hv_rm_mmu.c KVM: PPC: Book3S HV: Fix KSM memory corruption 2014-12-15 13:27:24 +01:00
book3s_hv_rm_xics.c KVM: PPC: Enable IRQFD support for the XICS interrupt controller 2014-08-05 14:26:33 +02:00
book3s_hv_rmhandlers.S KVM: PPC: Book3S HV: Add register name when loading toc 2014-09-22 10:11:31 +02:00
book3s_interrupts.S KVM: PPC: Book3S PR: Fix ABIv2 on LE 2014-07-28 15:22:15 +02:00
book3s_mmu_hpte.c kvm: powerpc: book3s: pr: move PR related tracepoints to a separate header 2013-10-17 15:36:22 +02:00
book3s_paired_singles.c KVM: PPC: Allow kvmppc_get_last_inst() to fail 2014-07-28 15:23:14 +02:00
book3s_pr.c Patch queue for ppc - 2014-09-24 2014-09-24 23:19:45 +02:00
book3s_pr_papr.c KVM: PPC: Book3S PR: Take SRCU read lock around RTAS kvm_read_guest() call 2014-07-28 15:23:16 +02:00
book3s_rmhandlers.S KVM: PPC: Book3S PR: Fix ABIv2 on LE 2014-07-28 15:22:15 +02:00
book3s_rtas.c KVM: PPC: RTAS: Do byte swaps explicitly 2014-07-07 23:17:20 +02:00
book3s_segment.S KVM: PPC: Book3S PR: Handle Facility interrupt and FSCR 2014-05-30 14:26:22 +02:00
book3s_xics.c KVM: PPC: Enable IRQFD support for the XICS interrupt controller 2014-08-05 14:26:33 +02:00
book3s_xics.h KVM: PPC: Enable IRQFD support for the XICS interrupt controller 2014-08-05 14:26:33 +02:00
booke.c KVM: PPC: Pass enum to kvmppc_get_last_inst 2014-09-22 10:11:36 +02:00
booke.h KVM: PPC: Book3e: Add AltiVec support 2014-09-22 10:11:32 +02:00
booke_emulate.c KVM: PPC: BOOKE: Emulate debug registers and exception 2014-09-22 10:11:33 +02:00
booke_interrupts.S KVM: PPC: Remove 440 support 2014-07-28 15:23:15 +02:00
bookehv_interrupts.S powerpc/kvm: common sw breakpoint instr across ppc 2014-09-22 10:11:36 +02:00
e500.c KVM: PPC: Add devname:kvm aliases for modules 2014-01-09 10:14:00 +01:00
e500.h KVM: PPC: e500mc: Add support for single threaded vcpus on e6500 core 2014-09-22 10:11:35 +02:00
e500_emulate.c KVM: PPC: Book3e: Add AltiVec support 2014-09-22 10:11:32 +02:00
e500_mmu.c KVM: PPC: e500: Fix bad address type in deliver_tlb_misss() 2014-01-27 16:00:54 +01:00
e500_mmu_host.c Patch queue for ppc - 2014-09-24 2014-09-24 23:19:45 +02:00
e500_mmu_host.h
e500mc.c KVM: PPC: Book3E: Enable e6500 core 2014-09-22 10:11:35 +02:00
emulate.c KVM: PPC: Pass enum to kvmppc_get_last_inst 2014-09-22 10:11:36 +02:00
emulate_loadstore.c KVM: PPC: Pass enum to kvmppc_get_last_inst 2014-09-22 10:11:36 +02:00
fpu.S
irq.h
Kconfig KVM: PPC: Enable IRQFD support for the XICS interrupt controller 2014-08-05 14:26:33 +02:00
Makefile Here are the PPC and ARM changes for KVM, which I separated because 2014-08-07 11:35:30 -07:00
mpic.c KVM: irqchip: Provide and use accessors for irq routing table 2014-08-05 14:26:16 +02:00
powerpc.c KVM: PPC: Pass enum to kvmppc_get_last_inst 2014-09-22 10:11:36 +02:00
timing.c KVM: PPC: Remove DCR handling 2014-07-28 19:29:15 +02:00
timing.h KVM: PPC: Remove DCR handling 2014-07-28 19:29:15 +02:00
trace.h kvm: powerpc: booke: Move booke related tracepoints to separate header 2013-10-17 15:37:16 +02:00
trace_booke.h KVM: PPC: BookE: Improve irq inject tracepoint 2014-12-15 13:27:23 +01:00
trace_pr.h KVM: PPC: drop duplicate tracepoint 2014-08-05 14:23:41 +02:00