Before guest_memfd supports conversions, Coco VMs must not allow
GUEST_MEMFD_FLAG_SUPPORT_SHARED.
Because this is a platform stability requirement for hosts supporting
Coco VMs, this is an important test to retain.
Change-Id: I7a42a7d22e96adf17db3dcaedac6b175a36a0eab
Signed-off-by: Ackerley Tng <ackerleytng@google.com>
---
.../testing/selftests/kvm/guest_memfd_test.c | 26 ++++++++++++++++---
1 file changed, 23 insertions(+), 3 deletions(-)
diff --git a/tools/testing/selftests/kvm/guest_memfd_test.c b/tools/testing/selftests/kvm/guest_memfd_test.c
index bf2876cbd711..51d88acdf072 100644
--- a/tools/testing/selftests/kvm/guest_memfd_test.c
+++ b/tools/testing/selftests/kvm/guest_memfd_test.c
@@ -435,7 +435,8 @@ static void test_vm_type_gmem_flag_validity(unsigned long vm_type,
for (flag = BIT(0); flag; flag <<= 1) {
test_vm_with_gmem_flag(vm, flag, flag & expected_valid_flags);
- if (flag == GUEST_MEMFD_FLAG_SUPPORT_SHARED) {
+ if (flag == GUEST_MEMFD_FLAG_SUPPORT_SHARED &&
+ kvm_has_cap(KVM_CAP_GMEM_CONVERSION)) {
test_vm_with_gmem_flag(
vm, flag | GUEST_MEMFD_FLAG_INIT_PRIVATE, true);
}
@@ -444,7 +445,7 @@ static void test_vm_type_gmem_flag_validity(unsigned long vm_type,
kvm_vm_release(vm);
}
-static void test_gmem_flag_validity(void)
+static void test_gmem_flag_validity_without_conversion_cap(void)
{
uint64_t non_coco_vm_valid_flags = 0;
@@ -462,11 +463,30 @@ static void test_gmem_flag_validity(void)
#endif
}
+static void test_gmem_flag_validity(void)
+{
+ /* After conversions are supported, all VM types support shared mem. */
+ uint64_t valid_flags = GUEST_MEMFD_FLAG_SUPPORT_SHARED;
+
+ test_vm_type_gmem_flag_validity(VM_TYPE_DEFAULT, valid_flags);
+
+#ifdef __x86_64__
+ test_vm_type_gmem_flag_validity(KVM_X86_SW_PROTECTED_VM, valid_flags);
+ test_vm_type_gmem_flag_validity(KVM_X86_SEV_VM, valid_flags);
+ test_vm_type_gmem_flag_validity(KVM_X86_SEV_ES_VM, valid_flags);
+ test_vm_type_gmem_flag_validity(KVM_X86_SNP_VM, valid_flags);
+ test_vm_type_gmem_flag_validity(KVM_X86_TDX_VM, valid_flags);
+#endif
+}
+
int main(int argc, char *argv[])
{
TEST_REQUIRE(kvm_has_cap(KVM_CAP_GUEST_MEMFD));
- test_gmem_flag_validity();
+ if (kvm_has_cap(KVM_CAP_GMEM_CONVERSION))
+ test_gmem_flag_validity();
+ else
+ test_gmem_flag_validity_without_conversion_cap();
test_with_type(VM_TYPE_DEFAULT, 0, false);
if (kvm_has_cap(KVM_CAP_GMEM_SHARED_MEM)) {
--
2.49.0.1045.g170613ef41-goog