All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sean Christopherson <seanjc@google.com>
To: Maxim Levitsky <mlevitsk@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
	Vitaly Kuznetsov <vkuznets@redhat.com>,
	Wanpeng Li <wanpengli@tencent.com>,
	Jim Mattson <jmattson@google.com>, Joerg Roedel <joro@8bytes.org>,
	kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
	Oliver Upton <oupton@google.com>, Peter Shier <pshier@google.com>
Subject: Re: [PATCH v2 02/21] KVM: VMX: Drop bits 31:16 when shoving exception error code into VMCS
Date: Wed, 6 Jul 2022 16:12:20 +0000	[thread overview]
Message-ID: <YsW0ZDkfVywkQEJO@google.com> (raw)
In-Reply-To: <df72cfcdda55b594d6bbbd9b5b0e2b229dc6c718.camel@redhat.com>

On Wed, Jul 06, 2022, Maxim Levitsky wrote:
> On Tue, 2022-06-14 at 20:47 +0000, Sean Christopherson wrote:
> > Deliberately truncate the exception error code when shoving it into the
> > VMCS (VM-Entry field for vmcs01 and vmcs02, VM-Exit field for vmcs12).
> > Intel CPUs are incapable of handling 32-bit error codes and will never
> > generate an error code with bits 31:16, but userspace can provide an
> > arbitrary error code via KVM_SET_VCPU_EVENTS.  Failure to drop the bits
> > on exception injection results in failed VM-Entry, as VMX disallows
> > setting bits 31:16.  Setting the bits on VM-Exit would at best confuse
> > L1, and at worse induce a nested VM-Entry failure, e.g. if L1 decided to
> > reinject the exception back into L2.
> 
> Wouldn't it be better to fail KVM_SET_VCPU_EVENTS instead if it tries
> to set error code with uppper 16 bits set?

No, because AMD CPUs generate error codes with bits 31:16 set.  KVM "supports"
cross-vendor live migration, so outright rejecting is not an option.

> Or if that is considered ABI breakage, then KVM_SET_VCPU_EVENTS code
> can truncate the user given value to 16 bit.

Again, AMD, and more specifically SVM, allows bits 31:16 to be non-zero, so
truncation is only correct for VMX.  I say "VMX" instead of "Intel" because
architecturally the Intel CPUs do have 32-bit error codes, it's just the VMX
architecture that doesn't allow injection of 32-bit values.

  reply	other threads:[~2022-07-06 16:12 UTC|newest]

Thread overview: 78+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-14 20:47 [PATCH v2 00/21] KVM: x86: Event/exception fixes and cleanups Sean Christopherson
2022-06-14 20:47 ` [PATCH v2 01/21] KVM: nVMX: Unconditionally purge queued/injected events on nested "exit" Sean Christopherson
2022-06-16 23:47   ` Jim Mattson
2022-07-06 11:40   ` Maxim Levitsky
2022-06-14 20:47 ` [PATCH v2 02/21] KVM: VMX: Drop bits 31:16 when shoving exception error code into VMCS Sean Christopherson
2022-07-06 11:43   ` Maxim Levitsky
2022-07-06 16:12     ` Sean Christopherson [this message]
2022-07-06 18:50       ` Maxim Levitsky
2022-07-06 20:02   ` Jim Mattson
2022-06-14 20:47 ` [PATCH v2 03/21] KVM: x86: Don't check for code breakpoints when emulating on exception Sean Christopherson
2022-07-06 11:43   ` Maxim Levitsky
2022-07-06 22:17   ` Jim Mattson
2022-06-14 20:47 ` [PATCH v2 04/21] KVM: nVMX: Treat General Detect #DB (DR7.GD=1) as fault-like Sean Christopherson
2022-07-06 11:45   ` Maxim Levitsky
2022-06-14 20:47 ` [PATCH v2 05/21] KVM: nVMX: Prioritize TSS T-flag #DBs over Monitor Trap Flag Sean Christopherson
2022-07-06 11:57   ` Maxim Levitsky
2022-07-06 23:51   ` Jim Mattson
2022-07-07 17:14     ` Sean Christopherson
2022-06-14 20:47 ` [PATCH v2 06/21] KVM: x86: Treat #DBs from the emulator as fault-like (code and DR7.GD=1) Sean Christopherson
2022-07-06 11:57   ` Maxim Levitsky
2022-07-06 23:55   ` Jim Mattson
2022-07-07 17:19     ` Sean Christopherson
2022-06-14 20:47 ` [PATCH v2 07/21] KVM: x86: Use DR7_GD macro instead of open coding check in emulator Sean Christopherson
2022-07-06 11:58   ` Maxim Levitsky
2022-06-14 20:47 ` [PATCH v2 08/21] KVM: nVMX: Ignore SIPI that arrives in L2 when vCPU is not in WFS Sean Christopherson
2022-07-06 11:59   ` Maxim Levitsky
2022-06-14 20:47 ` [PATCH v2 09/21] KVM: nVMX: Unconditionally clear mtf_pending on nested VM-Exit Sean Christopherson
2022-07-06 12:00   ` Maxim Levitsky
2022-07-06 16:45     ` Sean Christopherson
2022-07-06 20:03       ` Maxim Levitsky
2022-06-14 20:47 ` [PATCH v2 10/21] KVM: VMX: Inject #PF on ENCLS as "emulated" #PF Sean Christopherson
2022-07-06 12:00   ` Maxim Levitsky
2022-06-14 20:47 ` [PATCH v2 11/21] KVM: x86: Rename kvm_x86_ops.queue_exception to inject_exception Sean Christopherson
2022-07-06 12:01   ` Maxim Levitsky
2022-06-14 20:47 ` [PATCH v2 12/21] KVM: x86: Make kvm_queued_exception a properly named, visible struct Sean Christopherson
2022-07-06 12:02   ` Maxim Levitsky
2022-07-18 13:07   ` Maxim Levitsky
2022-07-18 13:10     ` Maxim Levitsky
2022-07-18 15:40       ` Sean Christopherson
2022-06-14 20:47 ` [PATCH v2 13/21] KVM: x86: Formalize blocking of nested pending exceptions Sean Christopherson
2022-07-06 12:04   ` Maxim Levitsky
2022-07-06 17:36     ` Sean Christopherson
2022-07-06 20:03       ` Maxim Levitsky
2022-06-14 20:47 ` [PATCH v2 14/21] KVM: x86: Use kvm_queue_exception_e() to queue #DF Sean Christopherson
2022-07-06 12:04   ` Maxim Levitsky
2022-06-14 20:47 ` [PATCH v2 15/21] KVM: x86: Hoist nested event checks above event injection logic Sean Christopherson
2022-07-06 12:05   ` Maxim Levitsky
2022-06-14 20:47 ` [PATCH v2 16/21] KVM: x86: Evaluate ability to inject SMI/NMI/IRQ after potential VM-Exit Sean Christopherson
2022-07-06 12:05   ` Maxim Levitsky
2022-06-14 20:47 ` [PATCH v2 17/21] KVM: x86: Morph pending exceptions to pending VM-Exits at queue time Sean Christopherson
2022-07-06 12:15   ` Maxim Levitsky
2022-07-07  1:24     ` Sean Christopherson
2022-07-10 15:56       ` Maxim Levitsky
2022-07-11 15:22         ` Sean Christopherson
2022-06-14 20:47 ` [PATCH v2 18/21] KVM: x86: Treat pending TRIPLE_FAULT requests as pending exceptions Sean Christopherson
2022-07-06 12:16   ` Maxim Levitsky
2022-06-14 20:47 ` [PATCH v2 19/21] KVM: VMX: Update MTF and ICEBP comments to document KVM's subtle behavior Sean Christopherson
2022-06-14 20:47 ` [PATCH v2 20/21] KVM: selftests: Use uapi header to get VMX and SVM exit reasons/codes Sean Christopherson
2022-07-06 12:16   ` Maxim Levitsky
2022-06-14 20:47 ` [PATCH v2 21/21] KVM: selftests: Add an x86-only test to verify nested exception queueing Sean Christopherson
2022-07-06 12:17   ` Maxim Levitsky
2022-06-16 13:16 ` [PATCH v2 00/21] KVM: x86: Event/exception fixes and cleanups Maxim Levitsky
2022-06-29 11:16 ` Maxim Levitsky
2022-06-29 13:42   ` Jim Mattson
2022-06-30  8:22     ` Maxim Levitsky
2022-06-30 12:17       ` Jim Mattson
2022-06-30 13:10         ` Maxim Levitsky
2022-06-30 16:28       ` Jim Mattson
2022-07-01  7:37         ` Maxim Levitsky
2022-07-06 11:54     ` Maxim Levitsky
2022-07-06 17:13       ` Jim Mattson
2022-07-06 17:52         ` Sean Christopherson
2022-07-06 20:03           ` Maxim Levitsky
2022-07-06 20:11           ` Jim Mattson
2022-07-10 15:58             ` Maxim Levitsky
2022-06-29 15:53   ` Jim Mattson
2022-06-30  8:24     ` Maxim Levitsky
2022-06-30 12:20       ` Jim Mattson

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YsW0ZDkfVywkQEJO@google.com \
    --to=seanjc@google.com \
    --cc=jmattson@google.com \
    --cc=joro@8bytes.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mlevitsk@redhat.com \
    --cc=oupton@google.com \
    --cc=pbonzini@redhat.com \
    --cc=pshier@google.com \
    --cc=vkuznets@redhat.com \
    --cc=wanpengli@tencent.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.