All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ryan Afranji <afranji@google.com>
To: linux-kselftest@vger.kernel.org
Cc: pbonzini@redhat.com, seanjc@google.com, isaku.yamahata@intel.com,
	sagis@google.com, erdemaktas@google.com, afranji@google.com,
	runanwang@google.com, shuah@kernel.org, drjones@redhat.com,
	maz@kernel.org, bgardon@google.com, jmattson@google.com,
	dmatlack@google.com, peterx@redhat.com, oupton@google.com,
	ricarkol@google.com, yang.zhong@intel.com, wei.w.wang@intel.com,
	xiaoyao.li@intel.com, pgonda@google.com, eesposit@redhat.com,
	borntraeger@de.ibm.com, eric.auger@redhat.com,
	wangyanan55@huawei.com, aaronlewis@google.com,
	vkuznets@redhat.com, pshier@google.com, axelrasmussen@google.com,
	zhenzhong.duan@intel.com, maciej.szmigiero@oracle.com,
	like.xu@linux.intel.com, linux-kernel@vger.kernel.org,
	kvm@vger.kernel.org, ackerleytng@google.com
Subject: [PATCH v4 07/28] KVM: selftests: TDX: Update load_td_memory_region for VM memory backed by guest memfd
Date: Tue, 25 Jul 2023 22:01:00 +0000	[thread overview]
Message-ID: <20230725220132.2310657-8-afranji@google.com> (raw)
In-Reply-To: <20230725220132.2310657-1-afranji@google.com>

From: Ackerley Tng <ackerleytng@google.com>

If guest memory is backed by restricted memfd

+ UPM is being used, hence encrypted memory region has to be
  registered
+ Can avoid making a copy of guest memory before getting TDX to
  initialize the memory region

Signed-off-by: Ackerley Tng <ackerleytng@google.com>
Change-Id: I43a5a444d5d2b5bf0d6750f6ef82c16e3d7d755e
Signed-off-by: Ryan Afranji <afranji@google.com>
---
 .../selftests/kvm/lib/x86_64/tdx/tdx_util.c   | 41 +++++++++++++++----
 1 file changed, 32 insertions(+), 9 deletions(-)

diff --git a/tools/testing/selftests/kvm/lib/x86_64/tdx/tdx_util.c b/tools/testing/selftests/kvm/lib/x86_64/tdx/tdx_util.c
index 95c6fb263583..c30801f4f759 100644
--- a/tools/testing/selftests/kvm/lib/x86_64/tdx/tdx_util.c
+++ b/tools/testing/selftests/kvm/lib/x86_64/tdx/tdx_util.c
@@ -199,6 +199,21 @@ static void tdx_td_finalizemr(struct kvm_vm *vm)
 	tdx_ioctl(vm->fd, KVM_TDX_FINALIZE_VM, 0, NULL);
 }
 
+/*
+ * Other ioctls
+ */
+
+/**
+ * Register a memory region that may contain encrypted data in KVM.
+ */
+static void register_encrypted_memory_region(
+	struct kvm_vm *vm, struct userspace_mem_region *region)
+{
+	vm_set_memory_attributes(vm, region->region.guest_phys_addr,
+				 region->region.memory_size,
+				 KVM_MEMORY_ATTRIBUTE_PRIVATE);
+}
+
 /*
  * TD creation/setup/finalization
  */
@@ -383,30 +398,38 @@ static void load_td_memory_region(struct kvm_vm *vm,
 	if (!sparsebit_any_set(pages))
 		return;
 
+
+	if (region->region.gmem_fd != -1)
+		register_encrypted_memory_region(vm, region);
+
 	sparsebit_for_each_set_range(pages, i, j) {
 		const uint64_t size_to_load = (j - i + 1) * vm->page_size;
 		const uint64_t offset =
 			(i - lowest_page_in_region) * vm->page_size;
 		const uint64_t hva = hva_base + offset;
 		const uint64_t gpa = gpa_base + offset;
-		void *source_addr;
+		void *source_addr = (void *)hva;
 
 		/*
 		 * KVM_TDX_INIT_MEM_REGION ioctl cannot encrypt memory in place,
 		 * hence we have to make a copy if there's only one backing
 		 * memory source
 		 */
-		source_addr = mmap(NULL, size_to_load, PROT_READ | PROT_WRITE,
-				   MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
-		TEST_ASSERT(
-			source_addr,
-			"Could not allocate memory for loading memory region");
-
-		memcpy(source_addr, (void *)hva, size_to_load);
+		if (region->region.gmem_fd == -1) {
+			source_addr = mmap(NULL, size_to_load, PROT_READ | PROT_WRITE,
+					MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
+			TEST_ASSERT(
+				source_addr,
+				"Could not allocate memory for loading memory region");
+
+			memcpy(source_addr, (void *)hva, size_to_load);
+			memset((void *)hva, 0, size_to_load);
+		}
 
 		tdx_init_mem_region(vm, source_addr, gpa, size_to_load);
 
-		munmap(source_addr, size_to_load);
+		if (region->region.gmem_fd == -1)
+			munmap(source_addr, size_to_load);
 	}
 }
 
-- 
2.41.0.487.g6d72f3e995-goog


  parent reply	other threads:[~2023-07-25 22:03 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-25 22:00 [PATCH v4 00/28] TDX KVM selftests Ryan Afranji
2023-07-25 22:00 ` [PATCH v4 01/28] KVM: selftests: Add function to allow one-to-one GVA to GPA mappings Ryan Afranji
2023-07-25 22:00 ` [PATCH v4 02/28] KVM: selftests: Expose function that sets up sregs based on VM's mode Ryan Afranji
2023-07-25 22:00 ` [PATCH v4 03/28] KVM: selftests: Store initial stack address in struct kvm_vcpu Ryan Afranji
2023-07-25 22:00 ` [PATCH v4 04/28] KVM: selftests: Refactor steps in vCPU descriptor table initialization Ryan Afranji
2023-07-25 22:00 ` [PATCH v4 05/28] KVM: selftests: Add helper functions to create TDX VMs Ryan Afranji
2023-07-25 22:00 ` [PATCH v4 06/28] KVM: selftests: TDX: Use KVM_TDX_CAPABILITIES to validate TDs' attribute configuration Ryan Afranji
2023-07-25 22:01 ` Ryan Afranji [this message]
2023-07-25 22:01 ` [PATCH v4 08/28] KVM: selftests: TDX: Add TDX lifecycle test Ryan Afranji
2023-07-25 22:01 ` [PATCH v4 09/28] KVM: selftests: TDX: Add report_fatal_error test Ryan Afranji
2023-07-25 22:01 ` [PATCH v4 10/28] KVM: selftests: TDX: Adding test case for TDX port IO Ryan Afranji
2023-07-25 22:01 ` [PATCH v4 11/28] KVM: selftests: TDX: Add basic TDX CPUID test Ryan Afranji
2023-07-25 22:01 ` [PATCH v4 12/28] KVM: selftests: TDX: Add basic get_td_vmcall_info test Ryan Afranji
2023-07-25 22:01 ` [PATCH v4 13/28] KVM: selftests: TDX: Add TDX IO writes test Ryan Afranji
2023-07-25 22:01 ` [PATCH v4 14/28] KVM: selftests: TDX: Add TDX IO reads test Ryan Afranji
2023-07-25 22:01 ` [PATCH v4 15/28] KVM: selftests: TDX: Add TDX MSR read/write tests Ryan Afranji
2023-07-25 22:01 ` [PATCH v4 16/28] KVM: selftests: TDX: Add TDX HLT exit test Ryan Afranji
2023-07-25 22:01 ` [PATCH v4 17/28] KVM: selftests: TDX: Add TDX MMIO reads test Ryan Afranji
2023-07-25 22:01 ` [PATCH v4 18/28] KVM: selftests: TDX: Add TDX MMIO writes test Ryan Afranji
2023-07-25 22:01 ` [PATCH v4 19/28] KVM: selftests: TDX: Add TDX CPUID TDVMCALL test Ryan Afranji
2023-07-25 22:01 ` [PATCH v4 20/28] KVM: selftests: TDX: Verify the behavior when host consumes a TD private memory Ryan Afranji
2023-07-25 22:01 ` [PATCH v4 21/28] KVM: selftests: TDX: Add TDG.VP.INFO test Ryan Afranji
2023-07-25 22:01 ` [PATCH v4 22/28] KVM: selftests: Add functions to allow mapping as shared Ryan Afranji
2023-07-25 22:01 ` [PATCH v4 23/28] KVM: selftests: TDX: Add shared memory test Ryan Afranji
2023-07-25 22:01 ` [PATCH v4 24/28] KVM: selftests: Expose _vm_vaddr_alloc Ryan Afranji
2023-07-25 22:01 ` [PATCH v4 25/28] KVM: selftests: TDX: Add support for TDG.MEM.PAGE.ACCEPT Ryan Afranji
2023-07-25 22:01 ` [PATCH v4 26/28] KVM: selftests: TDX: Add support for TDG.VP.VEINFO.GET Ryan Afranji
2023-07-25 22:01 ` [PATCH v4 27/28] KVM: selftests: TDX: Add TDX UPM selftest Ryan Afranji
2023-07-25 22:01 ` [PATCH v4 28/28] KVM: selftests: TDX: Add TDX UPM selftests for implicit conversion Ryan Afranji
2023-07-26 18:55 ` [PATCH v4 00/28] TDX KVM selftests Isaku Yamahata

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=20230725220132.2310657-8-afranji@google.com \
    --to=afranji@google.com \
    --cc=aaronlewis@google.com \
    --cc=ackerleytng@google.com \
    --cc=axelrasmussen@google.com \
    --cc=bgardon@google.com \
    --cc=borntraeger@de.ibm.com \
    --cc=dmatlack@google.com \
    --cc=drjones@redhat.com \
    --cc=eesposit@redhat.com \
    --cc=erdemaktas@google.com \
    --cc=eric.auger@redhat.com \
    --cc=isaku.yamahata@intel.com \
    --cc=jmattson@google.com \
    --cc=kvm@vger.kernel.org \
    --cc=like.xu@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=maciej.szmigiero@oracle.com \
    --cc=maz@kernel.org \
    --cc=oupton@google.com \
    --cc=pbonzini@redhat.com \
    --cc=peterx@redhat.com \
    --cc=pgonda@google.com \
    --cc=pshier@google.com \
    --cc=ricarkol@google.com \
    --cc=runanwang@google.com \
    --cc=sagis@google.com \
    --cc=seanjc@google.com \
    --cc=shuah@kernel.org \
    --cc=vkuznets@redhat.com \
    --cc=wangyanan55@huawei.com \
    --cc=wei.w.wang@intel.com \
    --cc=xiaoyao.li@intel.com \
    --cc=yang.zhong@intel.com \
    --cc=zhenzhong.duan@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 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.