On Tue, 03 Sep 2013 03:56:06 +0100 Ben Hutchings <ben@xxxxxxxxxxxxxxx> wrote: > commit 2b29a9fdcb92bfc6b6f4c412d71505869de61a56 upstream. > > Any uaccess between guest_enter and guest_exit could trigger a page fault, > the page fault handler would handle it as a guest fault and translate a > user address as guest address. > > Signed-off-by: Dominik Dingel <dingel@xxxxxxxxxxxxxxxxxx> > Signed-off-by: Christian Borntraeger <borntraeger@xxxxxxxxxx> > Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> > [bwh: Backported to 3.2: adjust context and add the rc variable] > Signed-off-by: Ben Hutchings <ben@xxxxxxxxxxxxxxx> > --- > This is a blind backport, not even compile-tested, but I think it does > logically the same thing as your fix and would apply to 3.0.y and 3.2.y. > 3.4.y would need a different version again. > > Ben. Reviewed-by: Dominik Dingel <dingel@xxxxxxxxxxxxxxxxxx> Dominik > > arch/s390/kvm/kvm-s390.c | 21 ++++++++++++++------- > 1 file changed, 14 insertions(+), 7 deletions(-) > > --- a/arch/s390/kvm/kvm-s390.c > +++ b/arch/s390/kvm/kvm-s390.c > @@ -469,6 +469,8 @@ int kvm_arch_vcpu_ioctl_set_mpstate(stru > > static void __vcpu_run(struct kvm_vcpu *vcpu) > { > + int rc; > + > memcpy(&vcpu->arch.sie_block->gg14, &vcpu->arch.guest_gprs[14], 16); > > if (need_resched()) > @@ -479,21 +481,24 @@ static void __vcpu_run(struct kvm_vcpu * > > kvm_s390_deliver_pending_interrupts(vcpu); > > + VCPU_EVENT(vcpu, 6, "entering sie flags %x", > + atomic_read(&vcpu->arch.sie_block->cpuflags)); > + > vcpu->arch.sie_block->icptcode = 0; > local_irq_disable(); > kvm_guest_enter(); > local_irq_enable(); > - VCPU_EVENT(vcpu, 6, "entering sie flags %x", > - atomic_read(&vcpu->arch.sie_block->cpuflags)); > - if (sie64a(vcpu->arch.sie_block, vcpu->arch.guest_gprs)) { > + rc = sie64a(vcpu->arch.sie_block, vcpu->arch.guest_gprs); > + local_irq_disable(); > + kvm_guest_exit(); > + local_irq_enable(); > + > + if (rc) { > VCPU_EVENT(vcpu, 3, "%s", "fault in sie instruction"); > kvm_s390_inject_program_int(vcpu, PGM_ADDRESSING); > } > VCPU_EVENT(vcpu, 6, "exit sie icptcode %d", > vcpu->arch.sie_block->icptcode); > - local_irq_disable(); > - kvm_guest_exit(); > - local_irq_enable(); > > memcpy(&vcpu->arch.guest_gprs[14], &vcpu->arch.sie_block->gg14, 16); > } > > -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html