aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390
diff options
context:
space:
mode:
authorChristian Borntraeger <borntraeger@de.ibm.com>2014-01-20 06:34:13 -0500
committerChristian Borntraeger <borntraeger@de.ibm.com>2014-01-20 06:34:13 -0500
commit699bde3b6c95319749a8e1b7aa2b3f6bee84bff8 (patch)
treed646533cc2ae195b1c96d514394abeac6429b480 /arch/s390
parent26a865f4aa8e66a6d94958de7656f7f1b03c6c56 (diff)
KVM: s390: Fix memory access error detection
Seems that commit 210b1607012cc9034841a393e0591b2c86d9e26c (KVM: s390: Removed SIE_INTERCEPT_UCONTROL) lost a hunk when we reworked our patch queue to rework the async_fp code. We now ignore faults on the sie instruction (guest accesses non-existing memory) instead of sending a fault into the guest. This leads to hang situations with the old virtio transport that checks for descriptor memory after guest memory. Instead of bailing out this code now goes wild... Lets re-add the check. Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
Diffstat (limited to 'arch/s390')
-rw-r--r--arch/s390/kvm/kvm-s390.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index 1bb1ddaf93c0..7635c00a1479 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -738,6 +738,10 @@ static int vcpu_post_run(struct kvm_vcpu *vcpu, int exit_reason)
738 current->thread.gmap_addr; 738 current->thread.gmap_addr;
739 vcpu->run->s390_ucontrol.pgm_code = 0x10; 739 vcpu->run->s390_ucontrol.pgm_code = 0x10;
740 rc = -EREMOTE; 740 rc = -EREMOTE;
741 } else {
742 VCPU_EVENT(vcpu, 3, "%s", "fault in sie instruction");
743 trace_kvm_s390_sie_fault(vcpu);
744 rc = kvm_s390_inject_program_int(vcpu, PGM_ADDRESSING);
741 } 745 }
742 746
743 memcpy(&vcpu->run->s.regs.gprs[14], &vcpu->arch.sie_block->gg14, 16); 747 memcpy(&vcpu->run->s.regs.gprs[14], &vcpu->arch.sie_block->gg14, 16);