2024-01-11 11:15:34

by Kirill A. Shutemov

[permalink] [raw]
Subject: [PATCHv2] x86/mm: Fix memory encryption features advertisement

When memory encryption is enabled, the kernel prints the encryption
flavor that the system supports.

The check assumes that everything is AMD SME/SEV if it doesn't have
the TDX CPU feature set.

Hyper-V vTOM sets cc_vendor to CC_VENDOR_INTEL when it runs as L2 guest
on top of TDX, but not X86_FEATURE_TDX_GUEST. Hyper-V only needs memory
encryption enabled for I/O without the rest of CoCo enabling.

To avoid confusion, check the cc_vendor directly.

Possible alternative is to completely removing the print statement.
For a regular TDX guest, the kernel already prints a message indicating
that it is booting on TDX. Similarly, AMD and Hyper-V can also display
a message during their enumeration process.

Signed-off-by: Kirill A. Shutemov <[email protected]>
Cc: Dexuan Cui <[email protected]>
Cc: Jeremi Piotrowski <[email protected]>
---
arch/x86/mm/mem_encrypt.c | 56 +++++++++++++++++++++------------------
1 file changed, 30 insertions(+), 26 deletions(-)

diff --git a/arch/x86/mm/mem_encrypt.c b/arch/x86/mm/mem_encrypt.c
index c290c55b632b..d035bce3a2b0 100644
--- a/arch/x86/mm/mem_encrypt.c
+++ b/arch/x86/mm/mem_encrypt.c
@@ -42,38 +42,42 @@ bool force_dma_unencrypted(struct device *dev)

static void print_mem_encrypt_feature_info(void)
{
- pr_info("Memory Encryption Features active:");
+ pr_info("Memory Encryption Features active: ");

- if (cpu_feature_enabled(X86_FEATURE_TDX_GUEST)) {
- pr_cont(" Intel TDX\n");
- return;
- }
+ switch (cc_vendor) {
+ case CC_VENDOR_INTEL:
+ pr_cont("Intel TDX\n");
+ break;
+ case CC_VENDOR_AMD:
+ pr_cont("AMD");

- pr_cont(" AMD");
-
- /* Secure Memory Encryption */
- if (cc_platform_has(CC_ATTR_HOST_MEM_ENCRYPT)) {
+ /* Secure Memory Encryption */
+ if (cc_platform_has(CC_ATTR_HOST_MEM_ENCRYPT)) {
/*
* SME is mutually exclusive with any of the SEV
* features below.
- */
- pr_cont(" SME\n");
- return;
+ */
+ pr_cont(" SME\n");
+ return;
+ }
+
+ /* Secure Encrypted Virtualization */
+ if (cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT))
+ pr_cont(" SEV");
+
+ /* Encrypted Register State */
+ if (cc_platform_has(CC_ATTR_GUEST_STATE_ENCRYPT))
+ pr_cont(" SEV-ES");
+
+ /* Secure Nested Paging */
+ if (cc_platform_has(CC_ATTR_GUEST_SEV_SNP))
+ pr_cont(" SEV-SNP");
+
+ pr_cont("\n");
+ break;
+ default:
+ pr_cont("Unknown\n");
}
-
- /* Secure Encrypted Virtualization */
- if (cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT))
- pr_cont(" SEV");
-
- /* Encrypted Register State */
- if (cc_platform_has(CC_ATTR_GUEST_STATE_ENCRYPT))
- pr_cont(" SEV-ES");
-
- /* Secure Nested Paging */
- if (cc_platform_has(CC_ATTR_GUEST_SEV_SNP))
- pr_cont(" SEV-SNP");
-
- pr_cont("\n");
}

/* Architecture __weak replacement functions */
--
2.41.0



Subject: Re: [PATCHv2] x86/mm: Fix memory encryption features advertisement



On 1/11/2024 3:12 AM, Kirill A. Shutemov wrote:
> When memory encryption is enabled, the kernel prints the encryption
> flavor that the system supports.
>
> The check assumes that everything is AMD SME/SEV if it doesn't have
> the TDX CPU feature set.
>
> Hyper-V vTOM sets cc_vendor to CC_VENDOR_INTEL when it runs as L2 guest
> on top of TDX, but not X86_FEATURE_TDX_GUEST. Hyper-V only needs memory
> encryption enabled for I/O without the rest of CoCo enabling.
>
> To avoid confusion, check the cc_vendor directly.
>
> Possible alternative is to completely removing the print statement.
> For a regular TDX guest, the kernel already prints a message indicating
> that it is booting on TDX. Similarly, AMD and Hyper-V can also display
> a message during their enumeration process.

With this change, will it print "Intel TDX" for Hyper-V?

IMO, since there is already a debug message for type identification, we
can remove this part.

>
> Signed-off-by: Kirill A. Shutemov <[email protected]>
> Cc: Dexuan Cui <[email protected]>
> Cc: Jeremi Piotrowski <[email protected]>
> ---
> arch/x86/mm/mem_encrypt.c | 56 +++++++++++++++++++++------------------
> 1 file changed, 30 insertions(+), 26 deletions(-)
>
> diff --git a/arch/x86/mm/mem_encrypt.c b/arch/x86/mm/mem_encrypt.c
> index c290c55b632b..d035bce3a2b0 100644
> --- a/arch/x86/mm/mem_encrypt.c
> +++ b/arch/x86/mm/mem_encrypt.c
> @@ -42,38 +42,42 @@ bool force_dma_unencrypted(struct device *dev)
>
> static void print_mem_encrypt_feature_info(void)
> {
> - pr_info("Memory Encryption Features active:");
> + pr_info("Memory Encryption Features active: ");
>
> - if (cpu_feature_enabled(X86_FEATURE_TDX_GUEST)) {
> - pr_cont(" Intel TDX\n");
> - return;
> - }
> + switch (cc_vendor) {
> + case CC_VENDOR_INTEL:
> + pr_cont("Intel TDX\n");
> + break;
> + case CC_VENDOR_AMD:
> + pr_cont("AMD");
>
> - pr_cont(" AMD");
> -
> - /* Secure Memory Encryption */
> - if (cc_platform_has(CC_ATTR_HOST_MEM_ENCRYPT)) {
> + /* Secure Memory Encryption */
> + if (cc_platform_has(CC_ATTR_HOST_MEM_ENCRYPT)) {
> /*
> * SME is mutually exclusive with any of the SEV
> * features below.
> - */
> - pr_cont(" SME\n");
> - return;
> + */
> + pr_cont(" SME\n");
> + return;
> + }
> +
> + /* Secure Encrypted Virtualization */
> + if (cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT))
> + pr_cont(" SEV");
> +
> + /* Encrypted Register State */
> + if (cc_platform_has(CC_ATTR_GUEST_STATE_ENCRYPT))
> + pr_cont(" SEV-ES");
> +
> + /* Secure Nested Paging */
> + if (cc_platform_has(CC_ATTR_GUEST_SEV_SNP))
> + pr_cont(" SEV-SNP");
> +
> + pr_cont("\n");
> + break;
> + default:
> + pr_cont("Unknown\n");
> }
> -
> - /* Secure Encrypted Virtualization */
> - if (cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT))
> - pr_cont(" SEV");
> -
> - /* Encrypted Register State */
> - if (cc_platform_has(CC_ATTR_GUEST_STATE_ENCRYPT))
> - pr_cont(" SEV-ES");
> -
> - /* Secure Nested Paging */
> - if (cc_platform_has(CC_ATTR_GUEST_SEV_SNP))
> - pr_cont(" SEV-SNP");
> -
> - pr_cont("\n");
> }
>
> /* Architecture __weak replacement functions */

--
Sathyanarayanan Kuppuswamy
Linux Kernel Developer

2024-01-11 15:17:51

by Jeremi Piotrowski

[permalink] [raw]
Subject: Re: [PATCHv2] x86/mm: Fix memory encryption features advertisement

On 11/01/2024 15:19, Kuppuswamy Sathyanarayanan wrote:
>
>
> On 1/11/2024 3:12 AM, Kirill A. Shutemov wrote:
>> When memory encryption is enabled, the kernel prints the encryption
>> flavor that the system supports.
>>
>> The check assumes that everything is AMD SME/SEV if it doesn't have
>> the TDX CPU feature set.
>>
>> Hyper-V vTOM sets cc_vendor to CC_VENDOR_INTEL when it runs as L2 guest
>> on top of TDX, but not X86_FEATURE_TDX_GUEST. Hyper-V only needs memory
>> encryption enabled for I/O without the rest of CoCo enabling.
>>
>> To avoid confusion, check the cc_vendor directly.
>>
>> Possible alternative is to completely removing the print statement.
>> For a regular TDX guest, the kernel already prints a message indicating
>> that it is booting on TDX. Similarly, AMD and Hyper-V can also display
>> a message during their enumeration process.
>
> With this change, will it print "Intel TDX" for Hyper-V?

Yes, I just tested on AMD and Intel and the print is accurate now. Thanks.

Reviewed-by: Jeremi Piotrowski <[email protected]>

>
> IMO, since there is already a debug message for type identification, we
> can remove this part.
>

If that's the only way to get a fix merged then so be it, but I appreciate having
the possibility of greping for a single prefix for either vendor that the current
code provides.

>>
>> Signed-off-by: Kirill A. Shutemov <[email protected]>
>> Cc: Dexuan Cui <[email protected]>
>> Cc: Jeremi Piotrowski <[email protected]>
>> ---
>> arch/x86/mm/mem_encrypt.c | 56 +++++++++++++++++++++------------------
>> 1 file changed, 30 insertions(+), 26 deletions(-)
>>
>> diff --git a/arch/x86/mm/mem_encrypt.c b/arch/x86/mm/mem_encrypt.c
>> index c290c55b632b..d035bce3a2b0 100644
>> --- a/arch/x86/mm/mem_encrypt.c
>> +++ b/arch/x86/mm/mem_encrypt.c
>> @@ -42,38 +42,42 @@ bool force_dma_unencrypted(struct device *dev)
>>
>> static void print_mem_encrypt_feature_info(void)
>> {
>> - pr_info("Memory Encryption Features active:");
>> + pr_info("Memory Encryption Features active: ");
>>
>> - if (cpu_feature_enabled(X86_FEATURE_TDX_GUEST)) {
>> - pr_cont(" Intel TDX\n");
>> - return;
>> - }
>> + switch (cc_vendor) {
>> + case CC_VENDOR_INTEL:
>> + pr_cont("Intel TDX\n");
>> + break;
>> + case CC_VENDOR_AMD:
>> + pr_cont("AMD");
>>
>> - pr_cont(" AMD");
>> -
>> - /* Secure Memory Encryption */
>> - if (cc_platform_has(CC_ATTR_HOST_MEM_ENCRYPT)) {
>> + /* Secure Memory Encryption */
>> + if (cc_platform_has(CC_ATTR_HOST_MEM_ENCRYPT)) {
>> /*
>> * SME is mutually exclusive with any of the SEV
>> * features below.
>> - */
>> - pr_cont(" SME\n");
>> - return;
>> + */
>> + pr_cont(" SME\n");
>> + return;
>> + }
>> +
>> + /* Secure Encrypted Virtualization */
>> + if (cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT))
>> + pr_cont(" SEV");
>> +
>> + /* Encrypted Register State */
>> + if (cc_platform_has(CC_ATTR_GUEST_STATE_ENCRYPT))
>> + pr_cont(" SEV-ES");
>> +
>> + /* Secure Nested Paging */
>> + if (cc_platform_has(CC_ATTR_GUEST_SEV_SNP))
>> + pr_cont(" SEV-SNP");
>> +
>> + pr_cont("\n");
>> + break;
>> + default:
>> + pr_cont("Unknown\n");
>> }
>> -
>> - /* Secure Encrypted Virtualization */
>> - if (cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT))
>> - pr_cont(" SEV");
>> -
>> - /* Encrypted Register State */
>> - if (cc_platform_has(CC_ATTR_GUEST_STATE_ENCRYPT))
>> - pr_cont(" SEV-ES");
>> -
>> - /* Secure Nested Paging */
>> - if (cc_platform_has(CC_ATTR_GUEST_SEV_SNP))
>> - pr_cont(" SEV-SNP");
>> -
>> - pr_cont("\n");
>> }
>>
>> /* Architecture __weak replacement functions */
>

2024-01-11 20:42:11

by Tom Lendacky

[permalink] [raw]
Subject: Re: [PATCHv2] x86/mm: Fix memory encryption features advertisement

On 1/11/24 05:12, Kirill A. Shutemov wrote:
> When memory encryption is enabled, the kernel prints the encryption
> flavor that the system supports.
>
> The check assumes that everything is AMD SME/SEV if it doesn't have
> the TDX CPU feature set.
>
> Hyper-V vTOM sets cc_vendor to CC_VENDOR_INTEL when it runs as L2 guest
> on top of TDX, but not X86_FEATURE_TDX_GUEST. Hyper-V only needs memory
> encryption enabled for I/O without the rest of CoCo enabling.
>
> To avoid confusion, check the cc_vendor directly.
>
> Possible alternative is to completely removing the print statement.
> For a regular TDX guest, the kernel already prints a message indicating
> that it is booting on TDX. Similarly, AMD and Hyper-V can also display
> a message during their enumeration process.
>
> Signed-off-by: Kirill A. Shutemov <[email protected]>
> Cc: Dexuan Cui <[email protected]>
> Cc: Jeremi Piotrowski <[email protected]>

Acked-by: Tom Lendacky <[email protected]>

> ---
> arch/x86/mm/mem_encrypt.c | 56 +++++++++++++++++++++------------------
> 1 file changed, 30 insertions(+), 26 deletions(-)
>
> diff --git a/arch/x86/mm/mem_encrypt.c b/arch/x86/mm/mem_encrypt.c

Subject: Re: [PATCHv2] x86/mm: Fix memory encryption features advertisement



On 1/11/2024 6:19 AM, Kuppuswamy Sathyanarayanan wrote:
>
>
> On 1/11/2024 3:12 AM, Kirill A. Shutemov wrote:
>> When memory encryption is enabled, the kernel prints the encryption
>> flavor that the system supports.
>>
>> The check assumes that everything is AMD SME/SEV if it doesn't have
>> the TDX CPU feature set.
>>
>> Hyper-V vTOM sets cc_vendor to CC_VENDOR_INTEL when it runs as L2 guest
>> on top of TDX, but not X86_FEATURE_TDX_GUEST. Hyper-V only needs memory
>> encryption enabled for I/O without the rest of CoCo enabling.
>>
>> To avoid confusion, check the cc_vendor directly.
>>
>> Possible alternative is to completely removing the print statement.
>> For a regular TDX guest, the kernel already prints a message indicating
>> that it is booting on TDX. Similarly, AMD and Hyper-V can also display
>> a message during their enumeration process.
>
> With this change, will it print "Intel TDX" for Hyper-V?
>
> IMO, since there is already a debug message for type identification, we
> can remove this part.
>
>>
>> Signed-off-by: Kirill A. Shutemov <[email protected]>
>> Cc: Dexuan Cui <[email protected]>
>> Cc: Jeremi Piotrowski <[email protected]>
>> ---

Reviewed-by: Kuppuswamy Sathyanarayanan <[email protected]>

>> arch/x86/mm/mem_encrypt.c | 56 +++++++++++++++++++++------------------
>> 1 file changed, 30 insertions(+), 26 deletions(-)
>>
>> diff --git a/arch/x86/mm/mem_encrypt.c b/arch/x86/mm/mem_encrypt.c
>> index c290c55b632b..d035bce3a2b0 100644
>> --- a/arch/x86/mm/mem_encrypt.c
>> +++ b/arch/x86/mm/mem_encrypt.c
>> @@ -42,38 +42,42 @@ bool force_dma_unencrypted(struct device *dev)
>>
>> static void print_mem_encrypt_feature_info(void)
>> {
>> - pr_info("Memory Encryption Features active:");
>> + pr_info("Memory Encryption Features active: ");
>>
>> - if (cpu_feature_enabled(X86_FEATURE_TDX_GUEST)) {
>> - pr_cont(" Intel TDX\n");
>> - return;
>> - }
>> + switch (cc_vendor) {
>> + case CC_VENDOR_INTEL:
>> + pr_cont("Intel TDX\n");
>> + break;
>> + case CC_VENDOR_AMD:
>> + pr_cont("AMD");
>>
>> - pr_cont(" AMD");
>> -
>> - /* Secure Memory Encryption */
>> - if (cc_platform_has(CC_ATTR_HOST_MEM_ENCRYPT)) {
>> + /* Secure Memory Encryption */
>> + if (cc_platform_has(CC_ATTR_HOST_MEM_ENCRYPT)) {
>> /*
>> * SME is mutually exclusive with any of the SEV
>> * features below.
>> - */
>> - pr_cont(" SME\n");
>> - return;
>> + */
>> + pr_cont(" SME\n");
>> + return;
>> + }
>> +
>> + /* Secure Encrypted Virtualization */
>> + if (cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT))
>> + pr_cont(" SEV");
>> +
>> + /* Encrypted Register State */
>> + if (cc_platform_has(CC_ATTR_GUEST_STATE_ENCRYPT))
>> + pr_cont(" SEV-ES");
>> +
>> + /* Secure Nested Paging */
>> + if (cc_platform_has(CC_ATTR_GUEST_SEV_SNP))
>> + pr_cont(" SEV-SNP");
>> +
>> + pr_cont("\n");
>> + break;
>> + default:
>> + pr_cont("Unknown\n");
>> }
>> -
>> - /* Secure Encrypted Virtualization */
>> - if (cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT))
>> - pr_cont(" SEV");
>> -
>> - /* Encrypted Register State */
>> - if (cc_platform_has(CC_ATTR_GUEST_STATE_ENCRYPT))
>> - pr_cont(" SEV-ES");
>> -
>> - /* Secure Nested Paging */
>> - if (cc_platform_has(CC_ATTR_GUEST_SEV_SNP))
>> - pr_cont(" SEV-SNP");
>> -
>> - pr_cont("\n");
>> }
>>
>> /* Architecture __weak replacement functions */
>

--
Sathyanarayanan Kuppuswamy
Linux Kernel Developer

2024-01-16 10:36:25

by Huang, Kai

[permalink] [raw]
Subject: Re: [PATCHv2] x86/mm: Fix memory encryption features advertisement

On Thu, 2024-01-11 at 14:12 +0300, Kirill A. Shutemov wrote:
> When memory encryption is enabled, the kernel prints the encryption
> flavor that the system supports.
>
> The check assumes that everything is AMD SME/SEV if it doesn't have
> the TDX CPU feature set.
>
> Hyper-V vTOM sets cc_vendor to CC_VENDOR_INTEL when it runs as L2 guest
> on top of TDX, but not X86_FEATURE_TDX_GUEST. Hyper-V only needs memory
> encryption enabled for I/O without the rest of CoCo enabling.
>
> To avoid confusion, check the cc_vendor directly.
>
> Possible alternative is to completely removing the print statement.
> For a regular TDX guest, the kernel already prints a message indicating
> that it is booting on TDX. Similarly, AMD and Hyper-V can also display
> a message during their enumeration process.
>
> Signed-off-by: Kirill A. Shutemov <[email protected]>
> Cc: Dexuan Cui <[email protected]>
> Cc: Jeremi Piotrowski <[email protected]>

Seems this fix is for userspace running in hyperv environment being able to use
some easy grep to get which coco vendor it is running on?

If so I think it would be nice to mention it too.

Acked-by: Kai Huang <[email protected]>

> ---
> arch/x86/mm/mem_encrypt.c | 56 +++++++++++++++++++++------------------
> 1 file changed, 30 insertions(+), 26 deletions(-)
>
> diff --git a/arch/x86/mm/mem_encrypt.c b/arch/x86/mm/mem_encrypt.c
> index c290c55b632b..d035bce3a2b0 100644
> --- a/arch/x86/mm/mem_encrypt.c
> +++ b/arch/x86/mm/mem_encrypt.c
> @@ -42,38 +42,42 @@ bool force_dma_unencrypted(struct device *dev)
>
> static void print_mem_encrypt_feature_info(void)
> {
> - pr_info("Memory Encryption Features active:");
> + pr_info("Memory Encryption Features active: ");
>
> - if (cpu_feature_enabled(X86_FEATURE_TDX_GUEST)) {
> - pr_cont(" Intel TDX\n");
> - return;
> - }
> + switch (cc_vendor) {
> + case CC_VENDOR_INTEL:
> + pr_cont("Intel TDX\n");
> + break;
> + case CC_VENDOR_AMD:
> + pr_cont("AMD");
>
> - pr_cont(" AMD");
> -
> - /* Secure Memory Encryption */
> - if (cc_platform_has(CC_ATTR_HOST_MEM_ENCRYPT)) {
> + /* Secure Memory Encryption */
> + if (cc_platform_has(CC_ATTR_HOST_MEM_ENCRYPT)) {
> /*
> * SME is mutually exclusive with any of the SEV
> * features below.
> - */
> - pr_cont(" SME\n");
> - return;
> + */
> + pr_cont(" SME\n");
> + return;
> + }
> +
> + /* Secure Encrypted Virtualization */
> + if (cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT))
> + pr_cont(" SEV");
> +
> + /* Encrypted Register State */
> + if (cc_platform_has(CC_ATTR_GUEST_STATE_ENCRYPT))
> + pr_cont(" SEV-ES");
> +
> + /* Secure Nested Paging */
> + if (cc_platform_has(CC_ATTR_GUEST_SEV_SNP))
> + pr_cont(" SEV-SNP");
> +
> + pr_cont("\n");
> + break;
> + default:
> + pr_cont("Unknown\n");
> }
> -
> - /* Secure Encrypted Virtualization */
> - if (cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT))
> - pr_cont(" SEV");
> -
> - /* Encrypted Register State */
> - if (cc_platform_has(CC_ATTR_GUEST_STATE_ENCRYPT))
> - pr_cont(" SEV-ES");
> -
> - /* Secure Nested Paging */
> - if (cc_platform_has(CC_ATTR_GUEST_SEV_SNP))
> - pr_cont(" SEV-SNP");
> -
> - pr_cont("\n");
> }
>
> /* Architecture __weak replacement functions */

2024-01-16 10:59:07

by Kirill A. Shutemov

[permalink] [raw]
Subject: Re: [PATCHv2] x86/mm: Fix memory encryption features advertisement

On Tue, Jan 16, 2024 at 10:36:10AM +0000, Huang, Kai wrote:
> On Thu, 2024-01-11 at 14:12 +0300, Kirill A. Shutemov wrote:
> > When memory encryption is enabled, the kernel prints the encryption
> > flavor that the system supports.
> >
> > The check assumes that everything is AMD SME/SEV if it doesn't have
> > the TDX CPU feature set.
> >
> > Hyper-V vTOM sets cc_vendor to CC_VENDOR_INTEL when it runs as L2 guest
> > on top of TDX, but not X86_FEATURE_TDX_GUEST. Hyper-V only needs memory
> > encryption enabled for I/O without the rest of CoCo enabling.
> >
> > To avoid confusion, check the cc_vendor directly.
> >
> > Possible alternative is to completely removing the print statement.
> > For a regular TDX guest, the kernel already prints a message indicating
> > that it is booting on TDX. Similarly, AMD and Hyper-V can also display
> > a message during their enumeration process.
> >
> > Signed-off-by: Kirill A. Shutemov <[email protected]>
> > Cc: Dexuan Cui <[email protected]>
> > Cc: Jeremi Piotrowski <[email protected]>
>
> Seems this fix is for userspace running in hyperv environment being able to use
> some easy grep to get which coco vendor it is running on?

Making decision in userspace by grepping dmesg is bad idea and nobody
should do this. It can easily give false result: dmesg is not ABI, format
can change and ring buffer has finite size, the message can be overridden.

If we need a way for userspace to discover which CoCo environment it runs
on, we need proper ABI for that. Maybe sysfs file or something.

> If so I think it would be nice to mention it too.
>
> Acked-by: Kai Huang <[email protected]>

Thanks.

--
Kiryl Shutsemau / Kirill A. Shutemov

2024-01-16 22:31:36

by Huang, Kai

[permalink] [raw]
Subject: Re: [PATCHv2] x86/mm: Fix memory encryption features advertisement

On Tue, 2024-01-16 at 13:58 +0300, [email protected] wrote:
> On Tue, Jan 16, 2024 at 10:36:10AM +0000, Huang, Kai wrote:
> > On Thu, 2024-01-11 at 14:12 +0300, Kirill A. Shutemov wrote:
> > > When memory encryption is enabled, the kernel prints the encryption
> > > flavor that the system supports.
> > >
> > > The check assumes that everything is AMD SME/SEV if it doesn't have
> > > the TDX CPU feature set.
> > >
> > > Hyper-V vTOM sets cc_vendor to CC_VENDOR_INTEL when it runs as L2 guest
> > > on top of TDX, but not X86_FEATURE_TDX_GUEST. Hyper-V only needs memory
> > > encryption enabled for I/O without the rest of CoCo enabling.
> > >
> > > To avoid confusion, check the cc_vendor directly.
> > >
> > > Possible alternative is to completely removing the print statement.
> > > For a regular TDX guest, the kernel already prints a message indicating
> > > that it is booting on TDX. Similarly, AMD and Hyper-V can also display
> > > a message during their enumeration process.
> > >
> > > Signed-off-by: Kirill A. Shutemov <[email protected]>
> > > Cc: Dexuan Cui <[email protected]>
> > > Cc: Jeremi Piotrowski <[email protected]>
> >
> > Seems this fix is for userspace running in hyperv environment being able to use
> > some easy grep to get which coco vendor it is running on?
>
> Making decision in userspace by grepping dmesg is bad idea and nobody
> should do this. It can easily give false result: dmesg is not ABI, format
> can change and ring buffer has finite size, the message can be overridden.
>
> If we need a way for userspace to discover which CoCo environment it runs
> on, we need proper ABI for that. Maybe sysfs file or something.

Yeah agreed. :-)