mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Binbin Wu <binbin.wu@linux.intel.com>
To: "Edgecombe, Rick P" <rick.p.edgecombe@intel.com>,
	"Li, Xiaoyao" <xiaoyao.li@intel.com>,
	"seanjc@google.com" <seanjc@google.com>
Cc: "Gao, Chao" <chao.gao@intel.com>,
	"dave.hansen@linux.intel.com" <dave.hansen@linux.intel.com>,
	"kas@kernel.org" <kas@kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
	"pbonzini@redhat.com" <pbonzini@redhat.com>,
	"nik.borisov@suse.com" <nik.borisov@suse.com>,
	"andrew.cooper3@citrix.com" <andrew.cooper3@citrix.com>
Subject: Re: [PATCH v3 1/4] KVM: TDX: Track configurable CPUID bits allowed by KVM
Date: Fri, 11 Sep 2026 08:55:36 +0800	[thread overview]
Message-ID: <4e7edd44-d15e-48c9-89a4-a5baeba4fa12@linux.intel.com> (raw)
In-Reply-To: <18b2e611bf1d166dde6e27a68719fa5053151af6.camel@intel.com>

On 9/11/2026 5:29 AM, Edgecombe, Rick P wrote:
> On Thu, 2026-09-10 at 10:39 +0800, Binbin Wu wrote:
>>> I think this actually surfaces another problem with TD-first enabling.
>>> KVM_TDX_CAPABILITIES only returns the directly configurable bits. Then
>>> recall, KVM_TDX_GET_CPUID returns the actual TDX module's view of CPUID bits
>>> to userspace. Then userspace calls KVM_SET_CPUID to actually put them on
>>> KVM's vcpu so they can match between Qemu, KVM and TDX
>>
>> That brings up a point..
>>
>> Today, vcpu->arch.cpu_caps[] is capped by kvm_cpu_caps[] (plus a few special
>> cases).  As mentioned in the cover letter, this patch series doesn't enforce
>> consistency between KVM's view and the guest's view of vCPU capabilities
>> because KVM doesn't currently use its own view to make decisions for TDs (e.g.
>> saving/restoring feature-related MSRs).
> 
> Not sure if I'm missing your point here. I don't think we ever want to have KVM
> enforce consistency between KVM's view and guests. We just need to provide
> enough info to userspace such that it can make them consistent.

Consistency check prevents malicious userspace VMMs from lying to the KVM about
some host state clobbering if KVM uses guest_cpu_cap_has() to management the state
for TDX in the future.  

> 
>>
>> However, if KVM starts making decisions for TDX based on vcpu-
>>> arch.cpu_caps[], intersecting userspace input with kvm_cpu_caps[] will not
>> work for TDX. 
> 
> vcpu->arch.cpu_caps are actually already consulted for TDX. I remember seeing a
> bunch of the the guest cpuid feature checks during the base enabling, probably
> working on this problem. Let me what we have today.
> 
> From a Linux guest boot, guest_cpu_cap_has() returns true for:
> xsave
> smep
> smap
> fsgsbase
> pku
> la57
> umip
> vmx
> pcid
> lam
> unknown
> ibt
> x2apic
> 
> Since we share code with normal VMs (and manage shared EPT in KVM), some checks
> are going to happen. If there is some new feature foo we enable for TDX. And
> later KVM adds new logic around vcpu->arch.cpu_caps for it, then there is a
> small risk of being pinned down when we want to add new guest_cpu_cap_has()
> logic for normal VMs. Since we already are hitting these checks for TDX, the
> general case is not theoretical.

... Yes, this was my concern.
If in the future KVM adds new guest_cpu_cap_has() for a host state clobbering
feature and it is used TDX, it would cause problem if there is a mismatch between
guest_cpu_cap_has() and the real value exposed to the TD.

> 
>>  I think this is probably needed in the future?  If so, allowing features
>> outside of kvm_cpu_caps[] for TDX means
> 
> Yea, I think allowing TDX features outside of kvm_cpu_caps is for special cases.
> And filtering like you have is good.
> 
>>  we will need TDX-specific handling to construct KVM's view of vCPU
>> capabilities.  That likely implies tracking all known/supported TDX features,
>> which is doable, but it will make the allow list bigger.
> 
> In this thread we have been talking about what "normal VMs" support, but in the
> code and uAPI it really is about what KVM supports. If we let TDX use a feature
> that *KVM* doesn't support, it is the risky zone.
> 
> I say we punt on this. Let's remember it's dicey and if we find TDX feature
> enabling is being blocked all the time by normal VM enabling, we can work on a
> solution. Does anyone see any big risk of this being harder later than it is
> today?
> 
> I prefer to at least start filtering ASAP.

+1

  reply	other threads:[~2026-09-11  0:55 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-27  3:18 [PATCH v3 0/4] KVM: TDX: Validate directly configurable CPUID bits Binbin Wu
2026-08-27  3:18 ` [PATCH v3 1/4] KVM: TDX: Track configurable CPUID bits allowed by KVM Binbin Wu
2026-09-01  6:29   ` Tony Lindgren
2026-09-01  8:23     ` Binbin Wu
2026-09-01  8:27       ` Tony Lindgren
2026-09-01 14:35   ` Xiaoyao Li
2026-09-02  0:33     ` Binbin Wu
2026-09-02 15:09       ` Xiaoyao Li
2026-09-02 16:19         ` Binbin Wu
2026-09-02 16:22           ` Edgecombe, Rick P
2026-09-02 16:25             ` Binbin Wu
2026-09-03  7:28           ` Xiaoyao Li
2026-09-03  8:57             ` Binbin Wu
2026-09-08 21:13             ` Edgecombe, Rick P
2026-09-09 16:39               ` Xiaoyao Li
2026-09-09 22:29                 ` Sean Christopherson
2026-09-09 23:18                   ` Edgecombe, Rick P
2026-09-10  2:39                     ` Binbin Wu
2026-09-10 21:29                       ` Edgecombe, Rick P
2026-09-11  0:55                         ` Binbin Wu [this message]
2026-09-11  1:30                           ` Edgecombe, Rick P
2026-09-10  2:53                     ` Xiaoyao Li
2026-09-08 21:15         ` Edgecombe, Rick P
2026-08-27  3:18 ` [PATCH v3 2/4] KVM: TDX: Report CORE_CAPABILITIES as configurable Binbin Wu
2026-09-01  6:45   ` Tony Lindgren
2026-09-02 17:43   ` Kishen Maloor
2026-09-03  2:22     ` Binbin Wu
2026-09-03  6:10       ` Kishen Maloor
2026-09-03  8:12         ` Binbin Wu
2026-08-27  3:18 ` [PATCH v3 3/4] KVM: TDX: Filter configurable CPUID bits Binbin Wu
2026-09-01  6:44   ` Tony Lindgren
2026-09-01  8:42     ` Binbin Wu
2026-09-01  9:09       ` Tony Lindgren
2026-09-03  8:04   ` Xiaoyao Li
2026-09-03  8:23     ` Binbin Wu
2026-08-27  3:18 ` [PATCH v3 4/4] KVM: TDX: Validate userspace CPUID input for KVM_TDX_INIT_VM Binbin Wu
2026-09-01  6:47   ` Tony Lindgren
2026-08-27 19:33 ` [PATCH v3 0/4] KVM: TDX: Validate directly configurable CPUID bits Edgecombe, Rick P
2026-08-28  3:19   ` Binbin Wu
2026-08-28 16:58     ` Edgecombe, Rick P
2026-08-31  5:01       ` Binbin Wu
2026-09-01  9:42         ` Xiaoyao Li
2026-09-01 10:21           ` Xiaoyao Li
2026-09-02 16:09           ` Edgecombe, Rick P
2026-09-02 16:21             ` Binbin Wu
2026-09-09  1:46             ` Binbin Wu
2026-09-01  9:38     ` Xiaoyao Li
2026-09-01 17:41       ` Edgecombe, Rick P
2026-09-02 10:29         ` Xiaoyao Li
2026-09-02 13:13           ` Edgecombe, Rick P
2026-09-02 13:39             ` Xiaoyao Li
2026-09-02 13:53               ` Edgecombe, Rick P
2026-09-02 14:21                 ` Xiaoyao Li
2026-09-02 16:26             ` Binbin Wu
2026-09-08  9:42 ` Artem Bityutskiy
2026-09-09  0:04   ` Binbin Wu
2026-09-08 20:30 ` Artem Bityutskiy
2026-09-08 22:31   ` Edgecombe, Rick P
2026-09-09  6:52     ` Artem Bityutskiy
2026-09-09  8:48       ` Binbin Wu
2026-09-09 11:20         ` Artem Bityutskiy
2026-09-10  2:54           ` Binbin Wu
2026-09-08 23:54   ` Binbin Wu
2026-09-09  5:37     ` Binbin Wu

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=4e7edd44-d15e-48c9-89a4-a5baeba4fa12@linux.intel.com \
    --to=binbin.wu@linux.intel.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=chao.gao@intel.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=kas@kernel.org \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nik.borisov@suse.com \
    --cc=pbonzini@redhat.com \
    --cc=rick.p.edgecombe@intel.com \
    --cc=seanjc@google.com \
    --cc=xiaoyao.li@intel.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

all inboxes | Powered by JetHome®