diff options
Diffstat (limited to 'arch/powerpc/kvm/booke.c')
-rw-r--r-- | arch/powerpc/kvm/booke.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/arch/powerpc/kvm/booke.c b/arch/powerpc/kvm/booke.c index ee45fa01220e..bb6c988f010a 100644 --- a/arch/powerpc/kvm/booke.c +++ b/arch/powerpc/kvm/booke.c | |||
@@ -316,6 +316,11 @@ int kvmppc_vcpu_run(struct kvm_run *kvm_run, struct kvm_vcpu *vcpu) | |||
316 | { | 316 | { |
317 | int ret; | 317 | int ret; |
318 | 318 | ||
319 | if (!vcpu->arch.sane) { | ||
320 | kvm_run->exit_reason = KVM_EXIT_INTERNAL_ERROR; | ||
321 | return -EINVAL; | ||
322 | } | ||
323 | |||
319 | local_irq_disable(); | 324 | local_irq_disable(); |
320 | kvm_guest_enter(); | 325 | kvm_guest_enter(); |
321 | ret = __kvmppc_vcpu_run(kvm_run, vcpu); | 326 | ret = __kvmppc_vcpu_run(kvm_run, vcpu); |
@@ -618,6 +623,7 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu, | |||
618 | int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu) | 623 | int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu) |
619 | { | 624 | { |
620 | int i; | 625 | int i; |
626 | int r; | ||
621 | 627 | ||
622 | vcpu->arch.pc = 0; | 628 | vcpu->arch.pc = 0; |
623 | vcpu->arch.shared->msr = 0; | 629 | vcpu->arch.shared->msr = 0; |
@@ -634,7 +640,9 @@ int kvm_arch_vcpu_setup(struct kvm_vcpu *vcpu) | |||
634 | 640 | ||
635 | kvmppc_init_timing_stats(vcpu); | 641 | kvmppc_init_timing_stats(vcpu); |
636 | 642 | ||
637 | return kvmppc_core_vcpu_setup(vcpu); | 643 | r = kvmppc_core_vcpu_setup(vcpu); |
644 | kvmppc_sanity_check(vcpu); | ||
645 | return r; | ||
638 | } | 646 | } |
639 | 647 | ||
640 | int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) | 648 | int kvm_arch_vcpu_ioctl_get_regs(struct kvm_vcpu *vcpu, struct kvm_regs *regs) |