lkml.org 
[lkml]   [2015]   [Jan]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.4 086/177] kvm: x86: don't kill guest on unknown exit reason
    Date
    From: "Michael S. Tsirkin" <mst@redhat.com>

    3.4.106-rc1 review patch. If anyone has any objections, please let me know.

    ------------------


    commit 2bc19dc3754fc066c43799659f0d848631c44cfe upstream.

    KVM_EXIT_UNKNOWN is a kvm bug, we don't really know whether it was
    triggered by a priveledged application. Let's not kill the guest: WARN
    and inject #UD instead.

    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Zefan Li <lizefan@huawei.com>
    ---
    arch/x86/kvm/svm.c | 6 +++---
    arch/x86/kvm/vmx.c | 6 +++---
    2 files changed, 6 insertions(+), 6 deletions(-)

    diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
    index 1cd908c..86c74c0 100644
    --- a/arch/x86/kvm/svm.c
    +++ b/arch/x86/kvm/svm.c
    @@ -3494,9 +3494,9 @@ static int handle_exit(struct kvm_vcpu *vcpu)

    if (exit_code >= ARRAY_SIZE(svm_exit_handlers)
    || !svm_exit_handlers[exit_code]) {
    - kvm_run->exit_reason = KVM_EXIT_UNKNOWN;
    - kvm_run->hw.hardware_exit_reason = exit_code;
    - return 0;
    + WARN_ONCE(1, "vmx: unexpected exit reason 0x%x\n", exit_code);
    + kvm_queue_exception(vcpu, UD_VECTOR);
    + return 1;
    }

    return svm_exit_handlers[exit_code](svm);
    diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
    index 43c39db..2eb4e5a 100644
    --- a/arch/x86/kvm/vmx.c
    +++ b/arch/x86/kvm/vmx.c
    @@ -5936,10 +5936,10 @@ static int vmx_handle_exit(struct kvm_vcpu *vcpu)
    && kvm_vmx_exit_handlers[exit_reason])
    return kvm_vmx_exit_handlers[exit_reason](vcpu);
    else {
    - vcpu->run->exit_reason = KVM_EXIT_UNKNOWN;
    - vcpu->run->hw.hardware_exit_reason = exit_reason;
    + WARN_ONCE(1, "vmx: unexpected exit reason 0x%x\n", exit_reason);
    + kvm_queue_exception(vcpu, UD_VECTOR);
    + return 1;
    }
    - return 0;
    }

    static void update_cr8_intercept(struct kvm_vcpu *vcpu, int tpr, int irr)
    --
    1.9.1


    \
     
     \ /
      Last update: 2015-01-28 05:41    [W:4.170 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site