From: "Daniel P. Berrangé" <berrange@redhat.com>
To: Xiaoyao Li <xiaoyao.li@intel.com>
Cc: "Paolo Bonzini" <pbonzini@redhat.com>,
"David Hildenbrand" <david@redhat.com>,
"Igor Mammedov" <imammedo@redhat.com>,
"Eduardo Habkost" <eduardo@habkost.net>,
"Marcel Apfelbaum" <marcel.apfelbaum@gmail.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"Yanan Wang" <wangyanan55@huawei.com>,
"Michael S. Tsirkin" <mst@redhat.com>,
"Richard Henderson" <richard.henderson@linaro.org>,
"Ani Sinha" <anisinha@redhat.com>, "Peter Xu" <peterx@redhat.com>,
"Cornelia Huck" <cohuck@redhat.com>,
"Eric Blake" <eblake@redhat.com>,
"Markus Armbruster" <armbru@redhat.com>,
"Marcelo Tosatti" <mtosatti@redhat.com>,
kvm@vger.kernel.org, qemu-devel@nongnu.org,
"Michael Roth" <michael.roth@amd.com>,
"Claudio Fontana" <cfontana@suse.de>,
"Gerd Hoffmann" <kraxel@redhat.com>,
"Isaku Yamahata" <isaku.yamahata@gmail.com>,
"Chenyi Qiang" <chenyi.qiang@intel.com>
Subject: Re: [PATCH v5 49/65] i386/tdx: handle TDG.VP.VMCALL<GetQuote>
Date: Wed, 2 Apr 2025 16:49:47 +0100 [thread overview]
Message-ID: <Z-1cm6cEwNGs9NEu@redhat.com> (raw)
In-Reply-To: <0e15f14b-cd63-4ec4-8232-a5c0a96ba31d@intel.com>
On Wed, Apr 02, 2025 at 11:26:11PM +0800, Xiaoyao Li wrote:
> Sorry for the late response.
>
> KVM part of TDX attestation support is submitting again. QEMU part will
> follow and we need to settle dowm this topic before QEMU patches submission.
>
> On 10/4/2024 2:08 AM, Daniel P. Berrangé wrote:
> > On Thu, Feb 29, 2024 at 01:37:10AM -0500, Xiaoyao Li wrote:
> > > From: Isaku Yamahata <isaku.yamahata@intel.com>
> > >
> > > Add property "quote-generation-socket" to tdx-guest, which is a property
> > > of type SocketAddress to specify Quote Generation Service(QGS).
> > >
> > > On request of GetQuote, it connects to the QGS socket, read request
> > > data from shared guest memory, send the request data to the QGS,
> > > and store the response into shared guest memory, at last notify
> > > TD guest by interrupt.
> > >
> > > command line example:
> > > qemu-system-x86_64 \
> > > -object '{"qom-type":"tdx-guest","id":"tdx0","quote-generation-socket":{"type": "vsock", "cid":"1","port":"1234"}}' \
> > > -machine confidential-guest-support=tdx0
> > >
> > > Note, above example uses vsock type socket because the QGS we used
> > > implements the vsock socket. It can be other types, like UNIX socket,
> > > which depends on the implementation of QGS.
> > >
> > > To avoid no response from QGS server, setup a timer for the transaction.
> > > If timeout, make it an error and interrupt guest. Define the threshold of
> > > time to 30s at present, maybe change to other value if not appropriate.
> > >
> > > Signed-off-by: Isaku Yamahata <isaku.yamahata@intel.com>
> > > Codeveloped-by: Chenyi Qiang <chenyi.qiang@intel.com>
> > > Signed-off-by: Chenyi Qiang <chenyi.qiang@intel.com>
> > > Codeveloped-by: Xiaoyao Li <xiaoyao.li@intel.com>
> > > Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com>
> >
> >
> > > diff --git a/target/i386/kvm/tdx.c b/target/i386/kvm/tdx.c
> > > index 49f94d9d46f4..7dfda507cc8c 100644
> > > --- a/target/i386/kvm/tdx.c
> > > +++ b/target/i386/kvm/tdx.c
> >
> > > +static int tdx_handle_get_quote(X86CPU *cpu, struct kvm_tdx_vmcall *vmcall)
> > > +{
> > > + struct tdx_generate_quote_task *task;
> > > + struct tdx_get_quote_header hdr;
> > > + hwaddr buf_gpa = vmcall->in_r12;
> > > + uint64_t buf_len = vmcall->in_r13;
> > > +
> > > + QEMU_BUILD_BUG_ON(sizeof(struct tdx_get_quote_header) != TDX_GET_QUOTE_HDR_SIZE);
> > > +
> > > + vmcall->status_code = TDG_VP_VMCALL_INVALID_OPERAND;
> > > +
> > > + if (buf_len == 0) {
> > > + return 0;
> > > + }
> > > +
> > > + /* GPA must be shared. */
> > > + if (!(buf_gpa & tdx_shared_bit(cpu))) {
> > > + return 0;
> > > + }
> > > + buf_gpa &= ~tdx_shared_bit(cpu);
> > > +
> > > + if (!QEMU_IS_ALIGNED(buf_gpa, 4096) || !QEMU_IS_ALIGNED(buf_len, 4096)) {
> > > + vmcall->status_code = TDG_VP_VMCALL_ALIGN_ERROR;
> > > + return 0;
> > > + }
> > > +
> > > + if (address_space_read(&address_space_memory, buf_gpa, MEMTXATTRS_UNSPECIFIED,
> > > + &hdr, TDX_GET_QUOTE_HDR_SIZE) != MEMTX_OK) {
> > > + error_report("TDX: get-quote: failed to read GetQuote header.\n");
> > > + return -1;
> > > + }
> > > +
> > > + if (le64_to_cpu(hdr.structure_version) != TDX_GET_QUOTE_STRUCTURE_VERSION) {
> > > + return 0;
> > > + }
> > > +
> > > + /*
> > > + * Paranoid: Guest should clear error_code and out_len to avoid information
> > > + * leak. Enforce it. The initial value of them doesn't matter for qemu to
> > > + * process the request.
> > > + */
> > > + if (le64_to_cpu(hdr.error_code) != TDX_VP_GET_QUOTE_SUCCESS ||
> > > + le32_to_cpu(hdr.out_len) != 0) {
> > > + return 0;
> > > + }
> > > +
> > > + /* Only safe-guard check to avoid too large buffer size. */
> > > + if (buf_len > TDX_GET_QUOTE_MAX_BUF_LEN ||
> > > + le32_to_cpu(hdr.in_len) > buf_len - TDX_GET_QUOTE_HDR_SIZE) {
> > > + return 0;
> > > + }
> > > +
> > > + vmcall->status_code = TDG_VP_VMCALL_SUCCESS;
> > > + if (!tdx_guest->quote_generator) {
> > > + hdr.error_code = cpu_to_le64(TDX_VP_GET_QUOTE_QGS_UNAVAILABLE);
> > > + if (address_space_write(&address_space_memory, buf_gpa,
> > > + MEMTXATTRS_UNSPECIFIED,
> > > + &hdr, TDX_GET_QUOTE_HDR_SIZE) != MEMTX_OK) {
> > > + error_report("TDX: failed to update GetQuote header.\n");
> > > + return -1;
> > > + }
> > > + return 0;
> > > + }
> > > +
> > > + qemu_mutex_lock(&tdx_guest->quote_generator->lock);
> > > + if (tdx_guest->quote_generator->num >= TDX_MAX_GET_QUOTE_REQUEST) {
> > > + qemu_mutex_unlock(&tdx_guest->quote_generator->lock);
> > > + vmcall->status_code = TDG_VP_VMCALL_RETRY;
> > > + return 0;
> > > + }
> > > + tdx_guest->quote_generator->num++;
> > > + qemu_mutex_unlock(&tdx_guest->quote_generator->lock);
> > > +
> > > + /* Mark the buffer in-flight. */
> > > + hdr.error_code = cpu_to_le64(TDX_VP_GET_QUOTE_IN_FLIGHT);
> > > + if (address_space_write(&address_space_memory, buf_gpa,
> > > + MEMTXATTRS_UNSPECIFIED,
> > > + &hdr, TDX_GET_QUOTE_HDR_SIZE) != MEMTX_OK) {
> > > + error_report("TDX: failed to update GetQuote header.\n");
> > > + return -1;
> > > + }
> > > +
> > > + task = g_malloc(sizeof(*task));
> > > + task->buf_gpa = buf_gpa;
> > > + task->payload_gpa = buf_gpa + TDX_GET_QUOTE_HDR_SIZE;
> > > + task->payload_len = buf_len - TDX_GET_QUOTE_HDR_SIZE;
> > > + task->hdr = hdr;
> > > + task->quote_gen = tdx_guest->quote_generator;
> > > + task->completion = tdx_get_quote_completion;
> > > +
> > > + task->send_data_size = le32_to_cpu(hdr.in_len);
> > > + task->send_data = g_malloc(task->send_data_size);
> > > + task->send_data_sent = 0;
> > > +
> > > + if (address_space_read(&address_space_memory, task->payload_gpa,
> > > + MEMTXATTRS_UNSPECIFIED, task->send_data,
> > > + task->send_data_size) != MEMTX_OK) {
> > > + g_free(task->send_data);
> > > + return -1;
> > > + }
> >
> > In this method we've received "struct tdx_get_quote_header" from
> > the guest OS, and the 'hdr.in_len' field in that struct tells us
> > the payload to read from guest memory. This payload is treated as
> > opaque by QEMU and sent over the UNIX socket directly to QGS with
> > no validation of the payload.
> >
> > The payload is supposed to be a raw TDX report, that QGS will turn
> > into a quote.
> >
> > Nothing guarantees that the guest OS has actually given QEMU a
> > payload that represents a TDX report.
> >
> > The only validation done in this patch is to check the 'hdr.in_len'
> > was not ridiculously huge:
> >
> > #define TDX_GET_QUOTE_MAX_BUF_LEN (128 * 1024)
> >
> > #define TDX_GET_QUOTE_HDR_SIZE 24
> >
> > ...
> > /* Only safe-guard check to avoid too large buffer size. */
> > if (buf_len > TDX_GET_QUOTE_MAX_BUF_LEN ||
> > le32_to_cpu(hdr.in_len) > buf_len - TDX_GET_QUOTE_HDR_SIZE) {
> > return 0;
> > }
> >
> > IOW, hdr.in_len can be any value between 0 and 131048, and
> > the payload data read can contain arbitrary bytes.
> >
> >
> > Over in the QGS code, QGS historically had a socket protocol
> > taking various messages from the libtdxattest library which
> > were defined in this:
> >
> > https://github.com/intel/SGXDataCenterAttestationPrimitives/blob/main/QuoteGeneration/quote_wrapper/qgs_msg_lib/inc/qgs_msg_lib.h
> >
> > typedef enum _qgs_msg_type_t {
> > GET_QUOTE_REQ = 0,
> > GET_QUOTE_RESP = 1,
> > GET_COLLATERAL_REQ = 2,
> > GET_COLLATERAL_RESP = 3,
> > GET_PLATFORM_INFO_REQ = 4,
> > GET_PLATFORM_INFO_RESP = 5,
> > QGS_MSG_TYPE_MAX
> > } qgs_msg_type_t;
> >
> > typedef struct _qgs_msg_header_t {
> > uint16_t major_version;
> > uint16_t minor_version;
> > uint32_t type;
> > uint32_t size; // size of the whole message, include this header, in byte
> > uint32_t error_code; // used in response only
> > } qgs_msg_header_t;
> >
> > such messages are processed by the 'get_resp' method in QGS:
> >
> > https://github.com/intel/SGXDataCenterAttestationPrimitives/blob/main/QuoteGeneration/quote_wrapper/qgs/qgs_ql_logic.cpp#L78
> >
> > The 1.21 release of DCAP introduced a new "raw" mode in QGS which
> > just receives the raw 1024 byte packet from the client which is
> > supposed to be a raw TDX report. This is what this QEMU patch
> > is relying on IIUC.
> >
> >
> > The QGS daemon decides whether a client is speaking the formal
> > protocol, or "raw" mode, by trying to interpret the incoming
> > data as a 'qgs_msg_header_t' struct. If the header size looks
> > wrong & it has exactly 1024 bytes, then QGS assumes it has got
> > a raw TDX report:
> >
> > https://github.com/intel/SGXDataCenterAttestationPrimitives/blob/main/QuoteGeneration/quote_wrapper/qgs/qgs_server.cpp#L165
> >
> > This all works if the data QEMU gets from the guest is indeed a
> > 1024 byte raw TDX report, but what happens if we face a malicious
> > guest ?
> >
> > AFAICT, the guest OS is able to send a "qgs_msg_header_t" packet
> > to QEMU, which QEMU blindly passes on to QGS. This allows the
> > guest OS to invoke any of the three QGS commands - GET_QUOTE_REQ,
> > GET_COLLATERAL_REQ, or GET_PLATFORM_INFO_REQ. Fortunately I think
> > those three messages are all safe to invoke, but none the less,
> > this should not be permitted, as it leaves a wide open door for
> > possible future exploits.
> >
> > As mentioned before, I don't know why this raw mode was invented
> > for QGS, when QEMU itself could just take the guest report and
> > pack it into the 'GET_QUOTE_REQ' message format and send it to
> > QGS. This prevents the guest OS from being able to exploit QEMU
> > to invoke arbirtary QGS messages.
>
> I guess the raw mode was introduced due to the design was changed to let
> guest kernel to forward to TD report to host QGS via TDVMCALL instead of
> guest application communicates with host QGS via vsock, and Linux TD guest
> driver doesn't integrate any QGS protocol but just forward the raw TD report
> data to KVM.
>
> > IMHO, QEMU should be made to pack & unpack the TDX report from
> > the guest into the GET_QUOTE_REQ / GET_QUOTE_RESP messages, and
> > this "raw" mode should be removed to QGS as it is inherantly
> > dangerous to have this magic protocol overloading.
>
> There is no enforcement that the input data of TDVMCALL.GetQuote is the raw
> data of TD report. It is just the current Linux tdx-guest driver of tsm
> implementation send the raw data. For other TDX OS, or third-party driver,
> they might encapsulate the raw TD report data with QGS message header. For
> such cases, if QEMU adds another layer of package, it leads to the wrong
> result.
If I look at the GHCI spec
https://cdrdv2-public.intel.com/726790/TDX%20Guest-Hypervisor%20Communication%20Interface_1.0_344426_006%20-%2020230311.pdf
In "3.3 TDG.VP.VMCALL<GetQuote>", it indicates the parameter is a
"TDREPORT_STRUCT". IOW, it doesn't look valid to allow the guest to
send arbitrary other data as QGS protocol messages.
> If we are going to pack the input data of GETQUOTE in QEMU, it becomes a
> hard requirement from QEMU that the input data of GETQUOTE must be raw data
> of TD report.
AFAICT it must be a raw TDREPORT_STRUCT per the spec and thus QEMU must not
allow anything different, as that exposes a significantly larger security
attack surface on the QGS daemon.
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
next prev parent reply other threads:[~2025-04-02 15:50 UTC|newest]
Thread overview: 124+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-29 6:36 [PATCH v5 00/65] QEMU Guest memfd + QEMU TDX support Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 01/65] linux-headers: Update to Linux v6.8-rc5 Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 02/65] RAMBlock: Add support of KVM private guest memfd Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 03/65] HostMem: Add mechanism to opt in kvm guest memfd via MachineState Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 04/65] trace/kvm: Split address space and slot id in trace_kvm_set_user_memory() Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 05/65] kvm: Enable KVM_SET_USER_MEMORY_REGION2 for memslot Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 06/65] kvm: Introduce support for memory_attributes Xiaoyao Li
2024-03-19 2:03 ` Wang, Lei
2024-03-20 12:44 ` Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 07/65] physmem: Introduce ram_block_discard_guest_memfd_range() Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 08/65] kvm: handle KVM_EXIT_MEMORY_FAULT Xiaoyao Li
2024-03-05 9:10 ` Isaku Yamahata
2024-03-07 6:43 ` Xiaoyao Li
2024-03-19 2:14 ` Wang, Lei
2024-03-20 13:49 ` Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 09/65] trace/kvm: Add trace for page convertion between shared and private Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 10/65] kvm/memory: Make memory type private by default if it has guest memfd backend Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 11/65] *** HACK *** linux-headers: Update headers to pull in TDX API changes Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 12/65] i386: Introduce tdx-guest object Xiaoyao Li
2024-02-29 8:19 ` Markus Armbruster
2024-02-29 6:36 ` [PATCH v5 13/65] target/i386: Implement mc->kvm_type() to get VM type Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 14/65] i386/tdx: Implement tdx_kvm_init() to initialize TDX VM context Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 15/65] i386/tdx: Get tdx_capabilities via KVM_TDX_CAPABILITIES Xiaoyao Li
2024-03-12 23:02 ` Isaku Yamahata
2024-03-19 2:43 ` Wang, Lei
2024-02-29 6:36 ` [PATCH v5 16/65] i386/tdx: Introduce is_tdx_vm() helper and cache tdx_guest object Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 17/65] i386/tdx: Adjust the supported CPUID based on TDX restrictions Xiaoyao Li
2024-05-31 8:47 ` Duan, Zhenzhong
2024-06-12 9:23 ` Xiaoyao Li
2024-06-13 8:26 ` Duan, Zhenzhong
2024-06-14 1:02 ` Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 18/65] i386/tdx: Make Intel-PT unsupported for TD guest Xiaoyao Li
2024-05-31 9:27 ` Duan, Zhenzhong
2024-06-12 9:24 ` Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 19/65] i386/tdx: Update tdx_cpuid_lookup[].tdx_fixed0/1 by tdx_caps.cpuid_config[] Xiaoyao Li
2024-05-31 9:27 ` Duan, Zhenzhong
2024-02-29 6:36 ` [PATCH v5 20/65] i386/tdx: Integrate tdx_caps->xfam_fixed0/1 into tdx_cpuid_lookup Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 21/65] i386/tdx: Integrate tdx_caps->attrs_fixed0/1 to tdx_cpuid_lookup Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 22/65] i386/kvm: Move architectural CPUID leaf generation to separate helper Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 23/65] kvm: Introduce kvm_arch_pre_create_vcpu() Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 24/65] i386/tdx: Initialize TDX before creating TD vcpus Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 25/65] i386/tdx: Add property sept-ve-disable for tdx-guest object Xiaoyao Li
2024-06-06 10:45 ` Daniel P. Berrangé
2024-06-12 8:28 ` Xiaoyao Li
2024-06-13 8:35 ` Duan, Zhenzhong
2024-06-14 1:04 ` Xiaoyao Li
2024-06-14 2:49 ` Duan, Zhenzhong
2024-06-14 7:49 ` Daniel P. Berrangé
2024-06-24 15:01 ` Daniel P. Berrangé
2024-06-26 14:45 ` Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 26/65] i386/tdx: Make sept_ve_disable set by default Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 27/65] i386/tdx: Wire CPU features up with attributes of TD guest Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 28/65] i386/tdx: Disable pmu for " Xiaoyao Li
2024-04-16 8:32 ` Chenyi Qiang
2024-04-16 8:55 ` Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 29/65] i386/tdx: Validate TD attributes Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 30/65] i386/tdx: Support user configurable mrconfigid/mrowner/mrownerconfig Xiaoyao Li
2024-02-29 8:37 ` Markus Armbruster
2024-02-29 10:50 ` Xiaoyao Li
2024-02-29 13:25 ` Markus Armbruster
2024-02-29 14:14 ` Xiaoyao Li
2024-03-07 8:39 ` Markus Armbruster
2024-03-07 11:24 ` Xiaoyao Li
2024-03-07 13:56 ` Markus Armbruster
2024-03-11 1:25 ` Xiaoyao Li
2024-03-11 7:19 ` Markus Armbruster
2024-02-29 6:36 ` [PATCH v5 31/65] i386/tdx: Implement user specified tsc frequency Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 32/65] i386/tdx: Set kvm_readonly_mem_enabled to false for TDX VM Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 33/65] kvm/tdx: Don't complain when converting vMMIO region to shared Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 34/65] kvm/tdx: Ignore memory conversion to shared of unassigned region Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 35/65] memory: Introduce memory_region_init_ram_guest_memfd() Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 36/65] i386/tdx: load TDVF for TD guest Xiaoyao Li
2024-02-29 6:36 ` [PATCH v5 37/65] i386/tdvf: Introduce function to parse TDVF metadata Xiaoyao Li
2024-06-04 6:32 ` Duan, Zhenzhong
2024-02-29 6:36 ` [PATCH v5 38/65] i386/tdx: Parse TDVF metadata for TDX VM Xiaoyao Li
2024-02-29 6:37 ` [PATCH v5 39/65] i386/tdx: Skip BIOS shadowing setup Xiaoyao Li
2024-02-29 6:37 ` [PATCH v5 40/65] i386/tdx: Don't initialize pc.rom for TDX VMs Xiaoyao Li
2024-02-29 6:37 ` [PATCH v5 41/65] i386/tdx: Track mem_ptr for each firmware entry of TDVF Xiaoyao Li
2024-02-29 6:37 ` [PATCH v5 42/65] i386/tdx: Track RAM entries for TDX VM Xiaoyao Li
2024-02-29 6:37 ` [PATCH v5 43/65] headers: Add definitions from UEFI spec for volumes, resources, etc Xiaoyao Li
2024-02-29 6:37 ` [PATCH v5 44/65] i386/tdx: Setup the TD HOB list Xiaoyao Li
2024-02-29 6:37 ` [PATCH v5 45/65] i386/tdx: Populate TDVF private memory via KVM_MEMORY_MAPPING Xiaoyao Li
2024-02-29 6:37 ` [PATCH v5 46/65] i386/tdx: Call KVM_TDX_INIT_VCPU to initialize TDX vcpu Xiaoyao Li
2024-02-29 6:37 ` [PATCH v5 47/65] i386/tdx: Finalize TDX VM Xiaoyao Li
2024-02-29 6:37 ` [PATCH v5 48/65] i386/tdx: handle TDG.VP.VMCALL<SetupEventNotifyInterrupt> Xiaoyao Li
2024-02-29 6:37 ` [PATCH v5 49/65] i386/tdx: handle TDG.VP.VMCALL<GetQuote> Xiaoyao Li
2024-02-29 8:40 ` Markus Armbruster
2024-02-29 10:54 ` Xiaoyao Li
2024-02-29 13:28 ` Markus Armbruster
2024-03-07 11:25 ` Xiaoyao Li
2024-03-11 9:27 ` Daniel P. Berrangé
2024-03-12 7:44 ` Xiaoyao Li
2024-03-12 18:02 ` Isaku Yamahata
2024-03-13 15:31 ` Daniel P. Berrangé
2024-03-15 8:41 ` Xiaoyao Li
2024-10-03 18:08 ` Daniel P. Berrangé
2025-04-02 15:26 ` Xiaoyao Li
2025-04-02 15:49 ` Daniel P. Berrangé [this message]
2025-04-03 7:28 ` Xiaoyao Li
2025-04-03 8:10 ` Daniel P. Berrangé
2025-04-08 2:00 ` Xiaoyao Li
2024-02-29 6:37 ` [PATCH v5 50/65] i386/tdx: handle TDG.VP.VMCALL<MapGPA> hypercall Xiaoyao Li
2024-02-29 6:37 ` [PATCH v5 51/65] i386/tdx: Handle TDG.VP.VMCALL<REPORT_FATAL_ERROR> Xiaoyao Li
2024-02-29 6:37 ` [PATCH v5 52/65] i386/tdx: Wire TDX_REPORT_FATAL_ERROR with GuestPanic facility Xiaoyao Li
2024-02-29 8:51 ` Markus Armbruster
2024-03-07 11:30 ` Xiaoyao Li
2024-03-07 13:51 ` Markus Armbruster
2024-03-11 1:28 ` Xiaoyao Li
2024-03-11 7:29 ` Markus Armbruster
2024-03-12 7:27 ` Xiaoyao Li
2024-02-29 6:37 ` [PATCH v5 53/65] pci-host/q35: Move PAM initialization above SMRAM initialization Xiaoyao Li
2024-02-29 6:37 ` [PATCH v5 54/65] q35: Introduce smm_ranges property for q35-pci-host Xiaoyao Li
2024-10-05 8:15 ` Michael Tokarev
2024-02-29 6:37 ` [PATCH v5 55/65] i386/tdx: Disable SMM for TDX VMs Xiaoyao Li
2024-02-29 6:37 ` [PATCH v5 56/65] i386/tdx: Disable PIC " Xiaoyao Li
2024-02-29 6:37 ` [PATCH v5 57/65] i386/tdx: Don't allow system reset " Xiaoyao Li
2024-02-29 6:37 ` [PATCH v5 58/65] i386/tdx: LMCE is not supported for TDX Xiaoyao Li
2024-02-29 6:37 ` [PATCH v5 59/65] hw/i386: add eoi_intercept_unsupported member to X86MachineState Xiaoyao Li
2024-02-29 6:37 ` [PATCH v5 60/65] hw/i386: add option to forcibly report edge trigger in acpi tables Xiaoyao Li
2024-02-29 6:37 ` [PATCH v5 61/65] i386/tdx: Don't synchronize guest tsc for TDs Xiaoyao Li
2024-02-29 6:37 ` [PATCH v5 62/65] i386/tdx: Only configure MSR_IA32_UCODE_REV in kvm_init_msrs() " Xiaoyao Li
2024-02-29 6:37 ` [PATCH v5 63/65] i386/tdx: Skip kvm_put_apicbase() " Xiaoyao Li
2024-02-29 6:37 ` [PATCH v5 64/65] i386/tdx: Don't get/put guest state for TDX VMs Xiaoyao Li
2024-02-29 6:37 ` [PATCH v5 65/65] docs: Add TDX documentation Xiaoyao Li
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=Z-1cm6cEwNGs9NEu@redhat.com \
--to=berrange@redhat.com \
--cc=anisinha@redhat.com \
--cc=armbru@redhat.com \
--cc=cfontana@suse.de \
--cc=chenyi.qiang@intel.com \
--cc=cohuck@redhat.com \
--cc=david@redhat.com \
--cc=eblake@redhat.com \
--cc=eduardo@habkost.net \
--cc=imammedo@redhat.com \
--cc=isaku.yamahata@gmail.com \
--cc=kraxel@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=marcel.apfelbaum@gmail.com \
--cc=michael.roth@amd.com \
--cc=mst@redhat.com \
--cc=mtosatti@redhat.com \
--cc=pbonzini@redhat.com \
--cc=peterx@redhat.com \
--cc=philmd@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=wangyanan55@huawei.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;
as well as URLs for NNTP newsgroup(s).