Received: by 2002:a25:683:0:0:0:0:0 with SMTP id 125csp4627782ybg; Mon, 8 Jun 2020 12:40:42 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyYnN9TDWf5EdXudfqbsGcyO/KOintXNAcoOAw3Ft8p508uAUYmiisWv6+Akq8uo+4kYRby X-Received: by 2002:a17:906:3603:: with SMTP id q3mr23144598ejb.477.1591645242038; Mon, 08 Jun 2020 12:40:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591645242; cv=none; d=google.com; s=arc-20160816; b=rA5wqQbJhXzg3b8H1g9b3nov5wNgTFMof048wnKdTHgYBze2076uXUusvunnj0UWKS x+LRPWPEdr+/liQITP1HNER/ijmKfuMk6/x6P2jrp4bYoGb64exiAQkzkWa2gq04yZeD muM0nBrz52OR9G787PE+YncPcgF/PuueMeaRRYncWGxzbMVgRDjJHzXvIHhXm3mvBM65 O0NuioSC19R7iMFMlOYP3ulguQfG0loeK9oCRAQhY8TgNLsiD/DV6fMVGn25WBiM27Us BQVRD8gcQQti7vCS1vBNPoyBtQXtUIz/ilJ6tfdBOj3gWtnp/sXI1kvUD6jh/30dPYZK xLIQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=Uexpwyn2fR7P1DcGlDr4HzbFjkt5L1616WAI7BXfvnM=; b=m4oCRISgzVGQbHx1rSAGwwSdVNYJE9aHCYuVv5eJ12HQbsL6yrFK1uh0e3RJ32bykA CCkbrBPJ8xBRGUvAMLD/pUQp0Kpdb/sPnn+KBn9O72r0F+6JptNwjB5snb5UpaCqOvrW PyX6M7hQEllx80J4ezLIboxugiE1BFB6UUceN3ublN7mE0Kq3VjxKAy3xTHHi7GtryGi AM2VZIq7gO6EPBFrxsPAP7mJK9kU8mCHHQMieMUEm2v48ckqvZq9vF5mc2hYh2uiAbp8 1jXbUXjOQNrzjJjcINRrPcQKxP5BckpPbHhuuWefotyvkThTYAMjvaDgO4VGyj6b5mU/ VdEA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b="r/pKKW7l"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id o18si9368970ejr.423.2020.06.08.12.40.17; Mon, 08 Jun 2020 12:40:42 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b="r/pKKW7l"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726436AbgFHTiT (ORCPT + 99 others); Mon, 8 Jun 2020 15:38:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33648 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726435AbgFHTiR (ORCPT ); Mon, 8 Jun 2020 15:38:17 -0400 Received: from mail-lj1-x243.google.com (mail-lj1-x243.google.com [IPv6:2a00:1450:4864:20::243]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 62E09C08C5C2 for ; Mon, 8 Jun 2020 12:38:16 -0700 (PDT) Received: by mail-lj1-x243.google.com with SMTP id a25so22030248ljp.3 for ; Mon, 08 Jun 2020 12:38:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=Uexpwyn2fR7P1DcGlDr4HzbFjkt5L1616WAI7BXfvnM=; b=r/pKKW7ldNYNP5VPsKHOOYA9uiCiJDTOjL1qxw7wXFhqNSqZZ1N8qblK6dt54QqUUg eEplGmu6286Pb/e7cH0KQEBvToMQkN9LykMYJFc2UusP8YNKn0WwoDVzGkPixtKEVaes r6rS8bP0yW00zf7RnIM5Lv+a6HudIjwQaeJ/Uqr+Mh7arJU9kgpSTBhWoZtQErrLTIJK VGj40ZuwLCDffy95OV2HwmhW5RuBcPx9tSextzl+ojxDZeI7tCCAME8l3os7dvTM3ek7 7/lN68YINGXozqT3qZIVgnF8dSfTiR8QSXOvBqiB68QcMGnhB8UF56nSN/qJxbETBV9L LyRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=Uexpwyn2fR7P1DcGlDr4HzbFjkt5L1616WAI7BXfvnM=; b=JniMn65Dey76WuwROCPlNGrYPeR0R391UgVzct4KUQODWLTe0Tm3DRagnxMykylfzB T8GGtQ3yfCKMb8lFWDSr0G1RFrfxXmhbHYVbNjhwZcp9ZtN0nv0gAfNxkP1saD64NXHg l1pR/8TGNYDFqYrRziWlEaKGVYHBYqS7cu5g++92t6PkDNzJ7DsIpfLSWowHmnTZlVyj UxT+5V3kPClBDewANiENZXmTmmGrEFj5VOMq5CP+bD8Yj2XGLpqYsrbOiEkccQupSvCN TrYJmFB5CkDkL4t2RFoC3sCpppm6OSFC6Ld1e7AOciDdn7t7lo9EwkOKZtX/6pHIOQJC U9nw== X-Gm-Message-State: AOAM530+46jRAcMx+JYzsYjWdS9dHpXaEHSVzqGpuObCKuqk2KTjECCG SwgetN2e6iH4r05mI303/iCQIpH0QBTVbUFvO+PAdg== X-Received: by 2002:a2e:a17a:: with SMTP id u26mr11302926ljl.235.1591645094413; Mon, 08 Jun 2020 12:38:14 -0700 (PDT) MIME-Version: 1.0 References: <20200608191857.30319-1-sean.j.christopherson@intel.com> In-Reply-To: <20200608191857.30319-1-sean.j.christopherson@intel.com> From: Oliver Upton Date: Mon, 8 Jun 2020 12:38:03 -0700 Message-ID: Subject: Re: [PATCH v2] KVM: nVMX: Consult only the "basic" exit reason when routing nested exit To: Sean Christopherson Cc: Paolo Bonzini , Vitaly Kuznetsov , Wanpeng Li , Jim Mattson , Joerg Roedel , kvm list , Linux Kernel Mailing List , Xiaoyao Li , Krish Sadhukhan , Miaohe Lin Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, Jun 8, 2020 at 12:19 PM Sean Christopherson wrote: > > Consult only the basic exit reason, i.e. bits 15:0 of vmcs.EXIT_REASON, > when determining whether a nested VM-Exit should be reflected into L1 or > handled by KVM in L0. > > For better or worse, the switch statements nested_vmx_l0_wants_exit() > and nested_vmx_l1_wants_exit() default to reflecting the VM-Exit into L1 > for any nested VM-Exit without dedicated logic. Because the case > statements only contain the basic exit reason, any VM-Exit with modifier > bits set will be reflected to L1, even if KVM intended to handle it in > L0. > > Practically speaking, this only affects EXIT_REASON_MCE_DURING_VMENTRY, > i.e. a #MC that occurs on nested VM-Enter would be incorrectly routed to > L1, as "failed VM-Entry" is the only modifier that KVM can currently > encounter. The SMM modifiers will never be generated as KVM doesn't > support/employ a SMI Transfer Monitor. Ditto for "exit from enclave", > as KVM doesn't yet support virtualizing SGX, i.e. it's impossible to > enter an enclave in a KVM guest (L1 or L2). > > Note, the original version of this fix[*] is functionally equivalent and > far more suited to backporting as the affected code was refactored since > the original patch was posted. > > [*] https://lkml.kernel.org/r/20200227174430.26371-1-sean.j.christopherson@intel.com > > Fixes: 644d711aa0e1 ("KVM: nVMX: Deciding if L0 or L1 should handle an L2 exit") > Cc: Jim Mattson > Cc: Xiaoyao Li > Cc: stable@vger.kernel.org > Cc: Oliver Upton > Cc: Krish Sadhukhan > Cc: Miaohe Lin > Signed-off-by: Sean Christopherson Reviewed-by: Oliver Upton > --- > > Another wounded soldier. > > Oliver, Krish, and Miaohe all provided reviews for v1, but I didn't feel > comfortable adding the tags to v2 because this is far from a straight > rebase. > > v2: Rebased to kvm/queue, commit fb7333dfd812 ("KVM: SVM: fix calls ..."). > > arch/x86/kvm/vmx/nested.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/arch/x86/kvm/vmx/nested.c b/arch/x86/kvm/vmx/nested.c > index bcb50724be38..adb11b504d5c 100644 > --- a/arch/x86/kvm/vmx/nested.c > +++ b/arch/x86/kvm/vmx/nested.c > @@ -5672,7 +5672,7 @@ static bool nested_vmx_l0_wants_exit(struct kvm_vcpu *vcpu, u32 exit_reason) > { > u32 intr_info; > > - switch (exit_reason) { > + switch ((u16)exit_reason) { > case EXIT_REASON_EXCEPTION_NMI: > intr_info = vmx_get_intr_info(vcpu); > if (is_nmi(intr_info)) > @@ -5733,7 +5733,7 @@ static bool nested_vmx_l1_wants_exit(struct kvm_vcpu *vcpu, u32 exit_reason) > struct vmcs12 *vmcs12 = get_vmcs12(vcpu); > u32 intr_info; > > - switch (exit_reason) { > + switch ((u16)exit_reason) { > case EXIT_REASON_EXCEPTION_NMI: > intr_info = vmx_get_intr_info(vcpu); > if (is_nmi(intr_info)) > -- > 2.26.0 >