Re: [PATCH v5 3/3] x86/tdx: Add Quote generation support

From: Sathyanarayanan Kuppuswamy
Date: Thu May 05 2022 - 18:38:50 EST




On 5/5/22 3:15 PM, Kai Huang wrote:
On Thu, 2022-05-05 at 13:53 -0700, Sathyanarayanan Kuppuswamy wrote:
Hi Kai,

On 5/4/22 4:28 PM, Kai Huang wrote:
On Wed, 2022-05-04 at 15:49 -0700, Sathyanarayanan Kuppuswamy wrote:
--- a/arch/x86/coco/tdx/tdx.c
+++ b/arch/x86/coco/tdx/tdx.c
@@ -15,6 +15,7 @@
  #include <asm/idtentry.h>
  #include <asm/irq_regs.h>
  #include <asm/desc.h>
+#include <asm/io.h>

  /* TDX module Call Leaf IDs */
  #define TDX_GET_INFO                   1
@@ -680,8 +681,15 @@ static bool try_accept_one(phys_addr_t *start,
unsigned long len,
   */
  static bool tdx_enc_status_changed(unsigned long vaddr, int numpages,
bool enc)
  {
-       phys_addr_t start = __pa(vaddr);
-       phys_addr_t end   = __pa(vaddr + numpages * PAGE_SIZE);
+       phys_addr_t start;
+       phys_addr_t end;
+
+       if (is_vmalloc_addr((void *)vaddr))
+               start =  page_to_phys(vmalloc_to_page((void*)vaddr));
+       else
+               start = __pa(vaddr);
+
+       end = start + numpages * PAGE_SIZE;

         if (!enc) {
                 /* Set the shared (decrypted) bits: */

Looks set_memory_decrypted() only works for direct-mapping, so you should not
use this. Instead, you can pass shared bit in 'prot' argument (using
pgprot_decrypted()) when you call vmap(), and explicitly call MapGPA().

Is it because of the above change, or you see other direct-mapping
dependencies in set_memory_*() functions?



set_memory_xx() is supposedly only for direct-mapping. Please use my
suggestion above.

I did not find any other direct-mapping dependency in set_memory_*()
functions other than what I have fixed. If I missed anything, please
let me know.

Also, even if set_memory_*() functions does not support vmalloc'ed
memory, IMO, it is better to add this support to it.

I want to avoid custom solution if it is possible to use generic
function.



--
Sathyanarayanan Kuppuswamy
Linux Kernel Developer