public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Sean Christopherson <seanjc@google.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
	Michal Luczaj <mhal@rbox.co>,
	David Woodhouse <dwmw2@infradead.org>
Subject: Re: [PATCH v2 03/16] KVM: x86: Always use non-compat vcpu_runstate_info size for gfn=>pfn cache
Date: Thu, 27 Oct 2022 14:44:58 +0000	[thread overview]
Message-ID: <Y1qZagwM0dMBjYhe@google.com> (raw)
In-Reply-To: <afad5f40-03ef-1380-9bfe-03bbaaed47a9@redhat.com>

On Thu, Oct 27, 2022, Paolo Bonzini wrote:
> On 10/13/22 23:12, Sean Christopherson wrote:
> > Always use the size of Xen's non-compat vcpu_runstate_info struct when
> > checking that the GPA+size doesn't cross a page boundary.  Conceptually,
> > using the current mode is more correct, but KVM isn't consistent with
> > itself as kvm_xen_vcpu_set_attr() unconditionally uses the "full" size
> > when activating the cache.  More importantly, prior to the introduction
> > of the gfn_to_pfn_cache, KVM _always_ used the full size, i.e. allowing
> > the guest (userspace?) to use a poorly aligned GPA in 32-bit mode but not
> > 64-bit mode is more of a bug than a feature, and fixing the bug doesn't
> > break KVM's historical ABI.
> 
> I'd rather not introduce additional restrictions in KVM,

But KVM already has this restriction.  "struct vcpu_info" is always checked for
the non-compat size, and as above, "struct vcpu_runstate_info" is checked for the
non-compat size during its initialization.

> actually easy to avoid this patch by instead enforcing that attributes are
> set in a sensible order:

I don't care about fixing XEN support, I care about forcing "length" to be immutable
in order to simplify the gfn_to_pfn_cache implementation.  Avoiding this patch
prevents doing that later in this series.

> - long mode cannot be changed after the shared info page is enabled (which
> makes sense because the shared info page also has a compat version)

How is this not introducing an additional restriction?  This seems way more
onerous than what is effectively a revert.

> - the caches must be activated after the shared info page (which enforces
> that the vCPU attributes are set after the VM attributes)
> 
> This is technically a userspace API break, but nobody is really using this
> API outside Amazon so...  Patches coming after I finish testing.

It's not just userspace break, it affects the guest ABI as well.  arch.xen.long_mode
isn't set just by userspace, it's also snapshot when the guest changes the hypercall
page.  Maybe there's something in the XEN ABI that says the hypercall page can never
be changed, but barring that I don't see how to prevent ending up with a misaligned
cache due to the guest enabling long mode.

  int kvm_xen_write_hypercall_page(struct kvm_vcpu *vcpu, u64 data)
  {
	struct kvm *kvm = vcpu->kvm;
	u32 page_num = data & ~PAGE_MASK;
	u64 page_addr = data & PAGE_MASK;
	bool lm = is_long_mode(vcpu);

	/* Latch long_mode for shared_info pages etc. */
	vcpu->kvm->arch.xen.long_mode = lm;

  reply	other threads:[~2022-10-27 14:45 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-13 21:12 [PATCH v2 00/16] KVM: x86: gfn_to_pfn_cache fixes and cleanups Sean Christopherson
2022-10-13 21:12 ` [PATCH v2 01/16] KVM: Initialize gfn_to_pfn_cache locks in dedicated helper Sean Christopherson
2022-10-13 21:12 ` [PATCH v2 02/16] KVM: Reject attempts to consume or refresh inactive gfn_to_pfn_cache Sean Christopherson
2022-10-13 21:12 ` [PATCH v2 03/16] KVM: x86: Always use non-compat vcpu_runstate_info size for gfn=>pfn cache Sean Christopherson
2022-10-27 11:11   ` Paolo Bonzini
2022-10-27 14:44     ` Sean Christopherson [this message]
2022-10-27 15:03       ` Paolo Bonzini
2022-10-27 15:10         ` Sean Christopherson
2022-10-27 16:56       ` Sean Christopherson
2022-10-13 21:12 ` [PATCH v2 04/16] KVM: Shorten gfn_to_pfn_cache function names Sean Christopherson
2022-10-13 21:12 ` [PATCH v2 05/16] KVM: x86: Remove unused argument in gpc_unmap_khva() Sean Christopherson
2022-12-02  9:28   ` Like Xu
2022-12-02 10:57     ` Michal Luczaj
2022-12-02 14:21       ` David Woodhouse
2022-12-02 17:01         ` Sean Christopherson
2022-10-13 21:12 ` [PATCH v2 06/16] KVM: Store immutable gfn_to_pfn_cache properties Sean Christopherson
2022-10-13 21:12 ` [PATCH v2 07/16] KVM: Store gfn_to_pfn_cache length as an immutable property Sean Christopherson
2022-11-21 14:26   ` David Woodhouse
2022-11-21 19:11     ` Sean Christopherson
2022-11-21 20:02       ` David Woodhouse
2022-11-22 18:59         ` Sean Christopherson
2022-10-13 21:12 ` [PATCH v2 08/16] KVM: Use gfn_to_pfn_cache's immutable "kvm" in kvm_gpc_check() Sean Christopherson
2022-10-13 21:12 ` [PATCH v2 09/16] KVM: Clean up hva_to_pfn_retry() Sean Christopherson
2022-10-13 21:12 ` [PATCH v2 10/16] KVM: Use gfn_to_pfn_cache's immutable "kvm" in kvm_gpc_refresh() Sean Christopherson
2022-10-13 21:12 ` [PATCH v2 11/16] KVM: Drop KVM's API to allow temprorarily unmapping gfn=>pfn cache Sean Christopherson
2022-10-13 21:12 ` [PATCH v2 12/16] KVM: Do not partially reinitialize gfn=>pfn cache during activation Sean Christopherson
2022-10-13 21:12 ` [PATCH v2 13/16] KVM: Drop @gpa from exported gfn=>pfn cache check() and refresh() helpers Sean Christopherson
2022-10-13 21:12 ` [PATCH v2 14/16] KVM: Skip unnecessary "unmap" if gpc is already valid during refresh Sean Christopherson
2022-10-13 21:12 ` [PATCH v2 15/16] KVM: selftests: Add tests in xen_shinfo_test to detect lock races Sean Christopherson
2022-10-13 21:12 ` [PATCH v2 16/16] KVM: selftests: Mark "guest_saw_irq" as volatile in xen_shinfo_test Sean Christopherson

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=Y1qZagwM0dMBjYhe@google.com \
    --to=seanjc@google.com \
    --cc=dwmw2@infradead.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mhal@rbox.co \
    --cc=pbonzini@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox