All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Roth <michael.roth@amd.com>
To: Borislav Petkov <bp@alien8.de>
Cc: Brijesh Singh <brijesh.singh@amd.com>, <x86@kernel.org>,
	<linux-kernel@vger.kernel.org>, <kvm@vger.kernel.org>,
	<linux-efi@vger.kernel.org>,
	<platform-driver-x86@vger.kernel.org>,
	<linux-coco@lists.linux.dev>, <linux-mm@kvack.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, Joerg Roedel <jroedel@suse.de>,
	Tom Lendacky <thomas.lendacky@amd.com>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Ard Biesheuvel <ardb@kernel.org>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Sean Christopherson <seanjc@google.com>,
	"Vitaly Kuznetsov" <vkuznets@redhat.com>,
	Jim Mattson <jmattson@google.com>,
	"Andy Lutomirski" <luto@kernel.org>,
	Dave Hansen <dave.hansen@linux.intel.com>,
	Sergio Lopez <slp@redhat.com>, Peter Gonda <pgonda@google.com>,
	"Peter Zijlstra" <peterz@infradead.org>,
	Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>,
	David Rientjes <rientjes@google.com>,
	Dov Murik <dovmurik@linux.ibm.com>,
	Tobin Feldman-Fitzthum <tobin@ibm.com>,
	Vlastimil Babka <vbabka@suse.cz>,
	"Kirill A . Shutemov" <kirill@shutemov.name>,
	Andi Kleen <ak@linux.intel.com>,
	"Dr . David Alan Gilbert" <dgilbert@redhat.com>,
	<brijesh.ksingh@gmail.com>, <tony.luck@intel.com>,
	<marcorr@google.com>
Subject: Re: [PATCH v9 31/43] x86/compressed/64: Add support for SEV-SNP CPUID table in #VC handlers
Date: Sat, 5 Feb 2022 10:22:49 -0600	[thread overview]
Message-ID: <20220205162249.4dkttihw6my7iha3@amd.com> (raw)
In-Reply-To: <Yf5XScto3mDXnl9u@zn.tnic>

On Sat, Feb 05, 2022 at 11:54:01AM +0100, Borislav Petkov wrote:
> On Fri, Jan 28, 2022 at 11:17:52AM -0600, Brijesh Singh wrote:
> 
> > +static const struct snp_cpuid_info *snp_cpuid_info_get_ptr(void)
> > +{
> > +	void *ptr;
> > +
> > +	asm ("lea cpuid_info_copy(%%rip), %0"
> > +	     : "=r" (ptr)
> 
> Same question as the last time:
> 
> Why not "=g" and let the compiler decide?

The documentation for lea (APM Volume 3 Chapter 3) seemed to require
that the destination register be a general purpose register, so it
seemed like there was potential for breakage in allowing GCC to use
anything otherwise. Maybe GCC is smart enough to figure that out, but
since we know the constraint in advance it seemed safer to stick
with the current approach of enforcing that constraint.

> 
> > +	     : "p" (&cpuid_info_copy));
> > +
> > +	return ptr;
> > +}
> 
> ...
> 
> > +static bool snp_cpuid_check_range(u32 func)
> > +{
> > +	if (func <= cpuid_std_range_max ||
> > +	    (func >= 0x40000000 && func <= cpuid_hyp_range_max) ||
> > +	    (func >= 0x80000000 && func <= cpuid_ext_range_max))
> > +		return true;
> > +
> > +	return false;
> > +}
> > +
> > +static int snp_cpuid_postprocess(u32 func, u32 subfunc, u32 *eax, u32 *ebx,
> > +				 u32 *ecx, u32 *edx)
> 
> And again, same question as the last time:
> 
> I'm wondering if you could make everything a lot easier by doing
> 
> static int snp_cpuid_postprocess(struct cpuid_leaf *leaf)
> 
> and marshall around that struct cpuid_leaf which contains func, subfunc,
> e[abcd]x instead of dealing with 6 parameters.
> 
> Callers of snp_cpuid() can simply allocate it on their stack and hand it
> in and it is all in sev-shared.c so nicely self-contained...
> 
> Ok I'm ignoring this patch for now and I'll review it only after you've
> worked in all comments from the previous review.

I did look into it and honestly it just seemed to add more abstractions that
made it harder to parse the specific operations taken place here. For
instance, post-processing of 0x8000001E entry, we have e{a,b,c,d}x from
the CPUID table, then to post process:

  switch (func):
  case 0x8000001E:
    /* extended APIC ID */
    snp_cpuid_hv(func, subfunc, eax, &ebx2, &ecx2, NULL);
                                |    |      |      |
                                |    |      |      edx from cpuid table is used as-is
                                |    |      |  
                                |    |      |
                                |    |      load HV value into tmp ecx2
                                |    |
                                |    load HV value into tmp ebx2
                                |
                                |
                                replace eax completely with the HV value

    # then do the remaining fixups for final ebx/ecx

    /* compute ID */
    *ebx = (*ebx & GENMASK(31, 8)) | (ebx2 & GENMASK(7, 0));
    /* node ID */
    *ecx = (*ecx & GENMASK(31, 8)) | (ecx2 & GENMASK(7, 0));

and it all reads in a clear/familiar way to all the other
cpuid()/native_cpuid() users throughout the kernel, and from the
persective of someone auditing this from a security perspective that
needs to quickly check what registers come from the CPUID table, what
registers come from HV, what the final result is, it all just seems very
clear and familiar to me.

But if we start passing around this higher-level structure that does
not do anything other than abstract away e{a,b,c,x} to save on function
arguments, things become muddier, and there's more pointer dereference
operations and abstractions to sift through. I saved the diff from when
I looked into it previously (was just a rough-sketch, not build-tested),
and included it below for reference, but it just didn't seem to help with
readability to me, which I think is important here since this is probably
one of the most security-sensitive piece of the CPUID table handling,
since we're dealing with untrusted CPUID sources here and it needs to be
clear what exactly is ending up in the E{A,B,C,D} registers we're
returning for a particular CPUID instruction:

(There are some possible optimizations below, like added a mask parameter
so control specifically what EAX/EBX/ECX/EDX field should be modified,
possibly reworking snp_cpuid_info structure definitions to re-use the
cpuid_leaf struct internally, also modifying __sev_cpuid_hv() to take
the cpuid_leaf struct, etc., but none of that really seemed like
it would help much with the key issue of readability, so I ended up
setting it aside for v9)

diff --git a/arch/x86/kernel/sev-shared.c b/arch/x86/kernel/sev-shared.c
index b2defbf7e66b..53534a6b1dcc 100644
--- a/arch/x86/kernel/sev-shared.c
+++ b/arch/x86/kernel/sev-shared.c
@@ -49,6 +49,13 @@ struct snp_cpuid_info {
 	struct snp_cpuid_fn fn[SNP_CPUID_COUNT_MAX];
 } __packed;
 
+struct cpuid_leaf {
+	u32 eax;
+	u32 ebx;
+	u32 ecx;
+	u32 edx;
+};
+
 /*
  * Since feature negotiation related variables are set early in the boot
  * process they must reside in the .data section so as not to be zeroed
@@ -260,14 +267,14 @@ static int __sev_cpuid_hv(u32 func, int reg_idx, u32 *reg)
 	return 0;
 }
 
-static int sev_cpuid_hv(u32 func, u32 *eax, u32 *ebx, u32 *ecx, u32 *edx)
+static int sev_cpuid_hv(u32 func, struct cpuid_leaf *leaf)
 {
 	int ret;
 
-	ret = __sev_cpuid_hv(func, GHCB_CPUID_REQ_EAX, eax);
-	ret = ret ? : __sev_cpuid_hv(func, GHCB_CPUID_REQ_EBX, ebx);
-	ret = ret ? : __sev_cpuid_hv(func, GHCB_CPUID_REQ_ECX, ecx);
-	ret = ret ? : __sev_cpuid_hv(func, GHCB_CPUID_REQ_EDX, edx);
+	ret = __sev_cpuid_hv(func, GHCB_CPUID_REQ_EAX, &leaf->eax);
+	ret = ret ? : __sev_cpuid_hv(func, GHCB_CPUID_REQ_EBX, &leaf->ebx);
+	ret = ret ? : __sev_cpuid_hv(func, GHCB_CPUID_REQ_ECX, &leaf->ecx);
+	ret = ret ? : __sev_cpuid_hv(func, GHCB_CPUID_REQ_EDX, &leaf->edx);
 
 	return ret;
 }
@@ -328,8 +335,7 @@ static int snp_cpuid_calc_xsave_size(u64 xfeatures_en, bool compacted)
 	return xsave_size;
 }
 
-static void snp_cpuid_hv(u32 func, u32 subfunc, u32 *eax, u32 *ebx, u32 *ecx,
-			 u32 *edx)
+static void snp_cpuid_hv(u32 func, u32 subfunc, struct cpuid_leaf *leaf)
 {
 	/*
 	 * MSR protocol does not support fetching indexed subfunction, but is
@@ -342,13 +348,12 @@ static void snp_cpuid_hv(u32 func, u32 subfunc, u32 *eax, u32 *ebx, u32 *ecx,
 	if (cpuid_function_is_indexed(func) && subfunc)
 		sev_es_terminate(SEV_TERM_SET_LINUX, GHCB_TERM_CPUID_HV);
 
-	if (sev_cpuid_hv(func, eax, ebx, ecx, edx))
+	if (sev_cpuid_hv(func, leaf))
 		sev_es_terminate(SEV_TERM_SET_LINUX, GHCB_TERM_CPUID_HV);
 }
 
 static bool
-snp_cpuid_get_validated_func(u32 func, u32 subfunc, u32 *eax, u32 *ebx,
-			     u32 *ecx, u32 *edx)
+snp_cpuid_get_validated_func(u32 func, u32 subfunc, struct cpuid_leaf *leaf)
 {
 	const struct snp_cpuid_info *cpuid_info = snp_cpuid_info_get_ptr();
 	int i;
@@ -362,10 +367,10 @@ snp_cpuid_get_validated_func(u32 func, u32 subfunc, u32 *eax, u32 *ebx,
 		if (cpuid_function_is_indexed(func) && fn->ecx_in != subfunc)
 			continue;
 
-		*eax = fn->eax;
-		*ebx = fn->ebx;
-		*ecx = fn->ecx;
-		*edx = fn->edx;
+		leaf->eax = fn->eax;
+		leaf->ebx = fn->ebx;
+		leaf->ecx = fn->ecx;
+		leaf->edx = fn->edx;
 
 		return true;
 	}
@@ -383,33 +388,34 @@ static bool snp_cpuid_check_range(u32 func)
 	return false;
 }
 
-static int snp_cpuid_postprocess(u32 func, u32 subfunc, u32 *eax, u32 *ebx,
-				 u32 *ecx, u32 *edx)
+static int snp_cpuid_postprocess(u32 func, u32 subfunc, struct cpuid_leaf *leaf)
 {
-	u32 ebx2, ecx2, edx2;
+	struct cpuid_leaf leaf_tmp;
 
 	switch (func) {
 	case 0x1:
-		snp_cpuid_hv(func, subfunc, NULL, &ebx2, NULL, &edx2);
+		snp_cpuid_hv(func, subfunc, &leaf_tmp);
 
 		/* initial APIC ID */
-		*ebx = (ebx2 & GENMASK(31, 24)) | (*ebx & GENMASK(23, 0));
+		leaf->ebx = (leaf_tmp.ebx & GENMASK(31, 24)) | (leaf->ebx & GENMASK(23, 0));
 		/* APIC enabled bit */
-		*edx = (edx2 & BIT(9)) | (*edx & ~BIT(9));
+		leaf->edx = (leaf_tmp.edx & BIT(9)) | (leaf->edx & ~BIT(9));
 
 		/* OSXSAVE enabled bit */
 		if (native_read_cr4() & X86_CR4_OSXSAVE)
-			*ecx |= BIT(27);
+			leaf->ecx |= BIT(27);
 		break;
 	case 0x7:
 		/* OSPKE enabled bit */
-		*ecx &= ~BIT(4);
+		leaf->ecx &= ~BIT(4);
 		if (native_read_cr4() & X86_CR4_PKE)
-			*ecx |= BIT(4);
+			leaf->ecx |= BIT(4);
 		break;
 	case 0xB:
 		/* extended APIC ID */
-		snp_cpuid_hv(func, 0, NULL, NULL, NULL, edx);
+		snp_cpuid_hv(func, 0, &leaf_tmp);
+		leaf->edx = leaf_tmp.edx;
+
 		break;
 	case 0xD: {
 		bool compacted = false;
@@ -440,7 +446,7 @@ static int snp_cpuid_postprocess(u32 func, u32 subfunc, u32 *eax, u32 *ebx,
 			 * to avoid this becoming an issue it's safer to simply
 			 * treat this as unsupported for SEV-SNP guests.
 			 */
-			if (!(*eax & (BIT(1) | BIT(3))))
+			if (!(leaf->eax & (BIT(1) | BIT(3))))
 				return -EINVAL;
 
 			compacted = true;
@@ -450,16 +456,17 @@ static int snp_cpuid_postprocess(u32 func, u32 subfunc, u32 *eax, u32 *ebx,
 		if (xsave_size < 0)
 			return -EINVAL;
 
-		*ebx = xsave_size;
+		leaf->ebx = xsave_size;
 		}
 		break;
 	case 0x8000001E:
 		/* extended APIC ID */
-		snp_cpuid_hv(func, subfunc, eax, &ebx2, &ecx2, NULL);
+		snp_cpuid_hv(func, subfunc, &leaf_tmp);
+		leaf->eax = leaf_tmp.eax;
 		/* compute ID */
-		*ebx = (*ebx & GENMASK(31, 8)) | (ebx2 & GENMASK(7, 0));
+		leaf->ebx = (leaf->ebx & GENMASK(31, 8)) | (leaf_tmp.ebx & GENMASK(7, 0));
 		/* node ID */
-		*ecx = (*ecx & GENMASK(31, 8)) | (ecx2 & GENMASK(7, 0));
+		leaf->ecx = (leaf->ecx & GENMASK(31, 8)) | (leaf_tmp.ecx & GENMASK(7, 0));
 		break;
 	default:
 		/* No fix-ups needed, use values as-is. */
@@ -473,15 +480,14 @@ static int snp_cpuid_postprocess(u32 func, u32 subfunc, u32 *eax, u32 *ebx,
  * Returns -EOPNOTSUPP if feature not enabled. Any other return value should be
  * treated as fatal by caller.
  */
-static int snp_cpuid(u32 func, u32 subfunc, u32 *eax, u32 *ebx, u32 *ecx,
-		     u32 *edx)
+static int snp_cpuid(u32 func, u32 subfunc, struct cpuid_leaf *leaf)
 {
 	const struct snp_cpuid_info *cpuid_info = snp_cpuid_info_get_ptr();
 
 	if (!cpuid_info->count)
 		return -EOPNOTSUPP;
 
-	if (!snp_cpuid_get_validated_func(func, subfunc, eax, ebx, ecx, edx)) {
+	if (!snp_cpuid_get_validated_func(func, subfunc, leaf)) {
 		/*
 		 * Some hypervisors will avoid keeping track of CPUID entries
 		 * where all values are zero, since they can be handled the
@@ -497,12 +503,12 @@ static int snp_cpuid(u32 func, u32 subfunc, u32 *eax, u32 *ebx, u32 *ecx,
 		 * not in the table, but is still in the valid range, proceed
 		 * with the post-processing. Otherwise, just return zeros.
 		 */
-		*eax = *ebx = *ecx = *edx = 0;
+		leaf->eax = leaf->ebx = leaf->ecx = leaf->edx = 0;
 		if (!snp_cpuid_check_range(func))
 			return 0;
 	}
 
-	return snp_cpuid_postprocess(func, subfunc, eax, ebx, ecx, edx);
+	return snp_cpuid_postprocess(func, subfunc, leaf);
 }
 
 /*
@@ -514,28 +520,28 @@ void __init do_vc_no_ghcb(struct pt_regs *regs, unsigned long exit_code)
 {
 	unsigned int subfn = lower_bits(regs->cx, 32);
 	unsigned int fn = lower_bits(regs->ax, 32);
-	u32 eax, ebx, ecx, edx;
+	struct cpuid_leaf *leaf;
 	int ret;
 
 	/* Only CPUID is supported via MSR protocol */
 	if (exit_code != SVM_EXIT_CPUID)
 		goto fail;
 
-	ret = snp_cpuid(fn, subfn, &eax, &ebx, &ecx, &edx);
+	ret = snp_cpuid(fn, subfn, leaf);
 	if (!ret)
 		goto cpuid_done;
 
 	if (ret != -EOPNOTSUPP)
 		goto fail;
 
-	if (sev_cpuid_hv(fn, &eax, &ebx, &ecx, &edx))
+	if (sev_cpuid_hv(fn, leaf))
 		goto fail;
 
 cpuid_done:
-	regs->ax = eax;
-	regs->bx = ebx;
-	regs->cx = ecx;
-	regs->dx = edx;
+	regs->ax = leaf->eax;
+	regs->bx = leaf->ebx;
+	regs->cx = leaf->ecx;
+	regs->dx = leaf->edx;
 
 	/*
 	 * This is a VC handler and the #VC is only raised when SEV-ES is


> 
> -- 
> Regards/Gruss,
>     Boris.
> 
> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpeople.kernel.org%2Ftglx%2Fnotes-about-netiquette&amp;data=04%7C01%7CMichael.Roth%40amd.com%7C6bc14b8b5b854a38d7c008d9e895da5b%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637796552649205409%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&amp;sdata=Lc5o1tYKrtqUy2h%2B8onmgdaydqUWTlnj7V9rfuBEU0s%3D&amp;reserved=0

  parent reply	other threads:[~2022-02-05 16:24 UTC|newest]

Thread overview: 115+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-28 17:17 [PATCH v9 00/43] Add AMD Secure Nested Paging (SEV-SNP) Guest Support Brijesh Singh
2022-01-28 17:17 ` [PATCH v9 01/43] KVM: SVM: Define sev_features and vmpl field in the VMSA Brijesh Singh
2022-01-28 17:17 ` [PATCH v9 02/43] KVM: SVM: Create a separate mapping for the SEV-ES save area Brijesh Singh
2022-02-01 13:02   ` Borislav Petkov
2022-02-09 15:02     ` Brijesh Singh
2022-01-28 17:17 ` [PATCH v9 03/43] KVM: SVM: Create a separate mapping for the GHCB " Brijesh Singh
2022-01-28 17:17 ` [PATCH v9 04/43] KVM: SVM: Update the SEV-ES save area mapping Brijesh Singh
2022-01-28 17:17 ` [PATCH v9 05/43] x86/compressed/64: Detect/setup SEV/SME features earlier in boot Brijesh Singh
2022-02-01 18:08   ` Borislav Petkov
2022-02-01 20:35     ` Michael Roth
2022-02-01 21:28       ` Borislav Petkov
2022-02-02  0:52         ` Michael Roth
2022-02-02  6:09           ` Borislav Petkov
2022-02-02 17:28             ` Michael Roth
2022-02-02 18:57               ` Borislav Petkov
2022-01-28 17:17 ` [PATCH v9 06/43] x86/sev: " Brijesh Singh
2022-01-28 17:17 ` [PATCH v9 07/43] x86/mm: Extend cc_attr to include AMD SEV-SNP Brijesh Singh
2022-01-28 17:17 ` [PATCH v9 08/43] x86/sev: Define the Linux specific guest termination reasons Brijesh Singh
2022-01-28 17:17 ` [PATCH v9 09/43] x86/sev: Save the negotiated GHCB version Brijesh Singh
2022-01-28 17:17 ` [PATCH v9 10/43] x86/sev: Check SEV-SNP features support Brijesh Singh
2022-02-01 19:59   ` Borislav Petkov
2022-02-02 14:28     ` Brijesh Singh
2022-02-02 15:37       ` Borislav Petkov
2022-01-28 17:17 ` [PATCH v9 11/43] x86/sev: Add a helper for the PVALIDATE instruction Brijesh Singh
2022-01-28 17:17 ` [PATCH v9 12/43] x86/sev: Check the vmpl level Brijesh Singh
2022-01-28 17:17 ` [PATCH v9 13/43] x86/compressed: Add helper for validating pages in the decompression stage Brijesh Singh
2022-01-28 17:17 ` [PATCH v9 14/43] x86/compressed: Register GHCB memory when SEV-SNP is active Brijesh Singh
2022-01-28 17:17 ` [PATCH v9 15/43] x86/sev: " Brijesh Singh
2022-02-02 10:34   ` Borislav Petkov
2022-02-02 14:29     ` Brijesh Singh
2022-01-28 17:17 ` [PATCH v9 16/43] x86/sev: Add helper for validating pages in early enc attribute changes Brijesh Singh
2022-01-28 17:17 ` [PATCH v9 17/43] x86/kernel: Make the .bss..decrypted section shared in RMP table Brijesh Singh
2022-02-02 11:06   ` Borislav Petkov
2022-01-28 17:17 ` [PATCH v9 18/43] x86/kernel: Validate ROM memory before accessing when SEV-SNP is active Brijesh Singh
2022-02-02 15:41   ` Borislav Petkov
2022-01-28 17:17 ` [PATCH v9 19/43] x86/mm: Add support to validate memory when changing C-bit Brijesh Singh
2022-02-02 16:10   ` Borislav Petkov
2022-01-28 17:17 ` [PATCH v9 20/43] x86/sev: Use SEV-SNP AP creation to start secondary CPUs Brijesh Singh
2022-02-03  6:50   ` Borislav Petkov
2022-01-28 17:17 ` [PATCH v9 21/43] x86/head/64: Re-enable stack protection Brijesh Singh
2022-01-28 17:17 ` [PATCH v9 22/43] x86/sev: Move MSR-based VMGEXITs for CPUID to helper Brijesh Singh
2022-02-03 13:59   ` Borislav Petkov
2022-01-28 17:17 ` [PATCH v9 23/43] KVM: x86: Move lookup of indexed CPUID leafs " Brijesh Singh
2022-02-03 15:16   ` Borislav Petkov
2022-02-03 16:44     ` Michael Roth
2022-02-05 12:58       ` Borislav Petkov
2022-01-28 17:17 ` [PATCH v9 24/43] x86/compressed/acpi: Move EFI detection " Brijesh Singh
2022-02-03 14:39   ` Borislav Petkov
2022-01-28 17:17 ` [PATCH v9 25/43] x86/compressed/acpi: Move EFI system table lookup " Brijesh Singh
2022-02-03 14:48   ` Borislav Petkov
2022-01-28 17:17 ` [PATCH v9 26/43] x86/compressed/acpi: Move EFI config " Brijesh Singh
2022-02-03 15:13   ` Borislav Petkov
2022-01-28 17:17 ` [PATCH v9 27/43] x86/compressed/acpi: Move EFI vendor " Brijesh Singh
2022-01-28 17:17 ` [PATCH v9 28/43] x86/compressed/acpi: Move EFI kexec handling into common code Brijesh Singh
2022-02-04 16:09   ` Borislav Petkov
2022-01-28 17:17 ` [PATCH v9 29/43] x86/boot: Add Confidential Computing type to setup_data Brijesh Singh
2022-02-04 16:21   ` Borislav Petkov
2022-02-04 17:41     ` Brijesh Singh
2022-01-28 17:17 ` [PATCH v9 30/43] KVM: SEV: Add documentation for SEV-SNP CPUID Enforcement Brijesh Singh
2022-02-07 23:48   ` Sean Christopherson
2022-02-08 14:54     ` Michael Roth
2022-02-08 15:11     ` Borislav Petkov
2022-01-28 17:17 ` [PATCH v9 31/43] x86/compressed/64: Add support for SEV-SNP CPUID table in #VC handlers Brijesh Singh
2022-02-05 10:54   ` Borislav Petkov
2022-02-05 15:42     ` Michael Roth
2022-02-05 16:22     ` Michael Roth [this message]
2022-02-06 13:37       ` Borislav Petkov
2022-02-07 15:37         ` Michael Roth
2022-02-07 17:52           ` Borislav Petkov
2022-01-28 17:17 ` [PATCH v9 32/43] x86/boot: Add a pointer to Confidential Computing blob in bootparams Brijesh Singh
2022-02-05 13:07   ` Borislav Petkov
2022-01-28 17:17 ` [PATCH v9 33/43] x86/compressed: Add SEV-SNP feature detection/setup Brijesh Singh
2022-02-06 16:41   ` Borislav Petkov
2022-02-08 13:50     ` Michael Roth
2022-02-08 15:02       ` Borislav Petkov
2022-01-28 17:17 ` [PATCH v9 34/43] x86/compressed: Use firmware-validated CPUID leaves for SEV-SNP guests Brijesh Singh
2022-01-28 17:17 ` [PATCH v9 35/43] x86/compressed: Export and rename add_identity_map() Brijesh Singh
2022-02-06 19:01   ` Borislav Petkov
2022-01-28 17:17 ` [PATCH v9 36/43] x86/compressed/64: Add identity mapping for Confidential Computing blob Brijesh Singh
2022-02-06 19:21   ` Borislav Petkov
2022-01-28 17:17 ` [PATCH v9 37/43] x86/sev: Add SEV-SNP feature detection/setup Brijesh Singh
2022-02-06 19:38   ` Borislav Petkov
2022-02-08  5:25     ` Michael Roth
2022-01-28 17:17 ` [PATCH v9 38/43] x86/sev: Use firmware-validated CPUID for SEV-SNP guests Brijesh Singh
2022-02-05 17:19   ` Michael Roth
2022-02-06 15:46     ` Borislav Petkov
2022-02-07 17:00       ` Michael Roth
2022-02-07 18:43         ` Borislav Petkov
2022-02-06 19:50   ` Borislav Petkov
2022-01-28 17:18 ` [PATCH v9 39/43] x86/sev: Provide support for SNP guest request NAEs Brijesh Singh
2022-02-01 20:17   ` Peter Gonda
2022-03-03 14:53     ` Brijesh Singh
2022-01-28 17:18 ` [PATCH v9 40/43] x86/sev: Register SEV-SNP guest request platform device Brijesh Singh
2022-02-01 20:21   ` Peter Gonda
2022-02-02 16:27     ` Brijesh Singh
2022-02-06 20:05   ` Borislav Petkov
2022-01-28 17:18 ` [PATCH v9 41/43] virt: Add SEV-SNP guest driver Brijesh Singh
2022-02-01 20:33   ` Peter Gonda
2022-02-06 22:39   ` Borislav Petkov
2022-02-07 14:41     ` Brijesh Singh
2022-02-07 15:22       ` Borislav Petkov
2022-01-28 17:18 ` [PATCH v9 42/43] virt: sevguest: Add support to derive key Brijesh Singh
2022-02-01 20:39   ` Peter Gonda
2022-02-02 22:31     ` Brijesh Singh
2022-02-07  8:52   ` Borislav Petkov
2022-02-07 16:23     ` Brijesh Singh
2022-02-07 19:09       ` Dov Murik
2022-02-07 20:08         ` Brijesh Singh
2022-02-07 20:28           ` Borislav Petkov
2022-02-08  7:56           ` Dov Murik
2022-02-08 10:51             ` Borislav Petkov
2022-02-08 14:14             ` Brijesh Singh
2022-01-28 17:18 ` [PATCH v9 43/43] virt: sevguest: Add support to get extended report Brijesh Singh
2022-02-01 20:43   ` Peter Gonda
2022-02-07  9:16   ` Borislav Petkov

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=20220205162249.4dkttihw6my7iha3@amd.com \
    --to=michael.roth@amd.com \
    --cc=ak@linux.intel.com \
    --cc=ardb@kernel.org \
    --cc=bp@alien8.de \
    --cc=brijesh.ksingh@gmail.com \
    --cc=brijesh.singh@amd.com \
    --cc=dave.hansen@linux.intel.com \
    --cc=dgilbert@redhat.com \
    --cc=dovmurik@linux.ibm.com \
    --cc=hpa@zytor.com \
    --cc=jmattson@google.com \
    --cc=jroedel@suse.de \
    --cc=kirill@shutemov.name \
    --cc=kvm@vger.kernel.org \
    --cc=linux-coco@lists.linux.dev \
    --cc=linux-efi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=luto@kernel.org \
    --cc=marcorr@google.com \
    --cc=mingo@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=peterz@infradead.org \
    --cc=pgonda@google.com \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=rientjes@google.com \
    --cc=seanjc@google.com \
    --cc=slp@redhat.com \
    --cc=srinivas.pandruvada@linux.intel.com \
    --cc=tglx@linutronix.de \
    --cc=thomas.lendacky@amd.com \
    --cc=tobin@ibm.com \
    --cc=tony.luck@intel.com \
    --cc=vbabka@suse.cz \
    --cc=vkuznets@redhat.com \
    --cc=x86@kernel.org \
    /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.