lkml.org 
[lkml]   [2021]   [Jul]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH v2 26/69] KVM: x86: Add flag to disallow #MC injection / KVM_X86_SETUP_MCE
    Date
    From: Sean Christopherson <sean.j.christopherson@intel.com>

    Add a flag to disallow MCE injection and reject KVM_X86_SETUP_MCE with
    -EINVAL when set. TDX doesn't support injecting exceptions, including
    (virtual) #MCs.

    Co-developed-by: Kai Huang <kai.huang@linux.intel.com>
    Signed-off-by: Kai Huang <kai.huang@linux.intel.com>
    Signed-off-by: Sean Christopherson <sean.j.christopherson@intel.com>
    Signed-off-by: Isaku Yamahata <isaku.yamahata@intel.com>
    ---
    arch/x86/include/asm/kvm_host.h | 1 +
    arch/x86/kvm/x86.c | 14 +++++++-------
    2 files changed, 8 insertions(+), 7 deletions(-)

    diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
    index be329f0a7054..09e51c5e86b3 100644
    --- a/arch/x86/include/asm/kvm_host.h
    +++ b/arch/x86/include/asm/kvm_host.h
    @@ -1064,6 +1064,7 @@ struct kvm_arch {

    bool bus_lock_detection_enabled;
    bool irq_injection_disallowed;
    + bool mce_injection_disallowed;

    /* Deflect RDMSR and WRMSR to user space when they trigger a #GP */
    u32 user_space_msr_mask;
    diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
    index 4070786f17d1..681fc3be2b2b 100644
    --- a/arch/x86/kvm/x86.c
    +++ b/arch/x86/kvm/x86.c
    @@ -4319,15 +4319,16 @@ static int vcpu_ioctl_tpr_access_reporting(struct kvm_vcpu *vcpu,
    static int kvm_vcpu_ioctl_x86_setup_mce(struct kvm_vcpu *vcpu,
    u64 mcg_cap)
    {
    - int r;
    unsigned bank_num = mcg_cap & 0xff, bank;

    - r = -EINVAL;
    + if (vcpu->kvm->arch.mce_injection_disallowed)
    + return -EINVAL;
    +
    if (!bank_num || bank_num > KVM_MAX_MCE_BANKS)
    - goto out;
    + return -EINVAL;
    if (mcg_cap & ~(kvm_mce_cap_supported | 0xff | 0xff0000))
    - goto out;
    - r = 0;
    + return -EINVAL;
    +
    vcpu->arch.mcg_cap = mcg_cap;
    /* Init IA32_MCG_CTL to all 1s */
    if (mcg_cap & MCG_CTL_P)
    @@ -4337,8 +4338,7 @@ static int kvm_vcpu_ioctl_x86_setup_mce(struct kvm_vcpu *vcpu,
    vcpu->arch.mce_banks[bank*4] = ~(u64)0;

    static_call(kvm_x86_setup_mce)(vcpu);
    -out:
    - return r;
    + return 0;
    }

    static int kvm_vcpu_ioctl_x86_set_mce(struct kvm_vcpu *vcpu,
    --
    2.25.1
    \
     
     \ /
      Last update: 2021-07-03 00:08    [W:2.085 / U:0.260 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site