diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2016-03-29 11:23:25 +0200 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2016-04-01 12:10:09 +0200 |
commit | a2b5c3c0c8eea2d5d0eefcfc0fc0bdf386daa260 (patch) | |
tree | bec7cf046706e3d2c8ecfaa6bb232f7ef232861a /arch | |
parent | 321c5658c5e9192dea0d58ab67cf1791e45b2b26 (diff) | |
download | linux-a2b5c3c0c8eea2d5d0eefcfc0fc0bdf386daa260.tar.gz linux-a2b5c3c0c8eea2d5d0eefcfc0fc0bdf386daa260.tar.bz2 linux-a2b5c3c0c8eea2d5d0eefcfc0fc0bdf386daa260.zip |
KVM: Hyper-V: do not do hypercall userspace exits if SynIC is disabled
If SynIC is disabled, there is nothing that userspace can do to
handle these exits; on the other hand, userspace probably will
not know about KVM_EXIT_HYPERV_HCALL and complain about it or
even exit. Just prevent anything bad from happening by handling
the hypercall in KVM and returning an "invalid hypercall" code.
Fixes: 83326e43f27e9a8a501427a0060f8af519a39bb2
Cc: Andrey Smetanin <irqlevel@gmail.com>
Reviewed-by: Roman Kagan <rkagan@virtuozzo.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/kvm/hyperv.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/x86/kvm/hyperv.c b/arch/x86/kvm/hyperv.c index 5ff3485acb60..01bd7b7a6866 100644 --- a/arch/x86/kvm/hyperv.c +++ b/arch/x86/kvm/hyperv.c @@ -1116,6 +1116,11 @@ int kvm_hv_hypercall(struct kvm_vcpu *vcpu) break; case HVCALL_POST_MESSAGE: case HVCALL_SIGNAL_EVENT: + /* don't bother userspace if it has no way to handle it */ + if (!vcpu_to_synic(vcpu)->active) { + res = HV_STATUS_INVALID_HYPERCALL_CODE; + break; + } vcpu->run->exit_reason = KVM_EXIT_HYPERV; vcpu->run->hyperv.type = KVM_EXIT_HYPERV_HCALL; vcpu->run->hyperv.u.hcall.input = param; |