[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v5 29/65] i386/tdx: Validate TD attributes
From: |
Xiaoyao Li |
Subject: |
[PATCH v5 29/65] i386/tdx: Validate TD attributes |
Date: |
Thu, 29 Feb 2024 01:36:50 -0500 |
Validate TD attributes with tdx_caps that fixed-0 bits must be zero and
fixed-1 bits must be set.
Besides, sanity check the attribute bits that have not been supported by
QEMU yet. e.g., debug bit, it will be allowed in the future when debug
TD support lands in QEMU.
Signed-off-by: Xiaoyao Li <xiaoyao.li@intel.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
---
Changes in v3:
- using error_setg() for error report; (Daniel)
---
target/i386/kvm/tdx.c | 29 +++++++++++++++++++++++++++--
1 file changed, 27 insertions(+), 2 deletions(-)
diff --git a/target/i386/kvm/tdx.c b/target/i386/kvm/tdx.c
index 1c12cda002b8..d0ad4f57b5d0 100644
--- a/target/i386/kvm/tdx.c
+++ b/target/i386/kvm/tdx.c
@@ -32,6 +32,7 @@
(1U << KVM_FEATURE_PV_SCHED_YIELD) | \
(1U << KVM_FEATURE_MSI_EXT_DEST_ID))
+#define TDX_TD_ATTRIBUTES_DEBUG BIT_ULL(0)
#define TDX_TD_ATTRIBUTES_SEPT_VE_DISABLE BIT_ULL(28)
#define TDX_TD_ATTRIBUTES_PKS BIT_ULL(30)
#define TDX_TD_ATTRIBUTES_PERFMON BIT_ULL(63)
@@ -479,13 +480,34 @@ static int tdx_kvm_init(ConfidentialGuestSupport *cgs,
Error **errp)
return 0;
}
-static void setup_td_guest_attributes(X86CPU *x86cpu)
+static int tdx_validate_attributes(TdxGuest *tdx, Error **errp)
+{
+ if (((tdx->attributes & tdx_caps->attrs_fixed0) | tdx_caps->attrs_fixed1)
!=
+ tdx->attributes) {
+ error_setg(errp, "Invalid attributes 0x%lx for TDX VM "
+ "(fixed0 0x%llx, fixed1 0x%llx)",
+ tdx->attributes, tdx_caps->attrs_fixed0,
+ tdx_caps->attrs_fixed1);
+ return -1;
+ }
+
+ if (tdx->attributes & TDX_TD_ATTRIBUTES_DEBUG) {
+ error_setg(errp, "Current QEMU doesn't support attributes.debug[bit 0]
for TDX VM");
+ return -1;
+ }
+
+ return 0;
+}
+
+static int setup_td_guest_attributes(X86CPU *x86cpu, Error **errp)
{
CPUX86State *env = &x86cpu->env;
tdx_guest->attributes |= (env->features[FEAT_7_0_ECX] & CPUID_7_0_ECX_PKS)
?
TDX_TD_ATTRIBUTES_PKS : 0;
tdx_guest->attributes |= x86cpu->enable_pmu ? TDX_TD_ATTRIBUTES_PERFMON :
0;
+
+ return tdx_validate_attributes(tdx_guest, errp);
}
int tdx_pre_create_vcpu(CPUState *cpu, Error **errp)
@@ -512,7 +534,10 @@ int tdx_pre_create_vcpu(CPUState *cpu, Error **errp)
return r;
}
- setup_td_guest_attributes(x86cpu);
+ r = setup_td_guest_attributes(x86cpu, errp);
+ if (r) {
+ return r;
+ }
init_vm->cpuid.nent = kvm_x86_arch_cpuid(env, init_vm->cpuid.entries, 0);
--
2.34.1
- [PATCH v5 22/65] i386/kvm: Move architectural CPUID leaf generation to separate helper, (continued)
- [PATCH v5 22/65] i386/kvm: Move architectural CPUID leaf generation to separate helper, Xiaoyao Li, 2024/02/29
- [PATCH v5 23/65] kvm: Introduce kvm_arch_pre_create_vcpu(), Xiaoyao Li, 2024/02/29
- [PATCH v5 32/65] i386/tdx: Set kvm_readonly_mem_enabled to false for TDX VM, Xiaoyao Li, 2024/02/29
- [PATCH v5 31/65] i386/tdx: Implement user specified tsc frequency, Xiaoyao Li, 2024/02/29
- [PATCH v5 30/65] i386/tdx: Support user configurable mrconfigid/mrowner/mrownerconfig, Xiaoyao Li, 2024/02/29
- [PATCH v5 26/65] i386/tdx: Make sept_ve_disable set by default, Xiaoyao Li, 2024/02/29
- [PATCH v5 33/65] kvm/tdx: Don't complain when converting vMMIO region to shared, Xiaoyao Li, 2024/02/29
- [PATCH v5 27/65] i386/tdx: Wire CPU features up with attributes of TD guest, Xiaoyao Li, 2024/02/29
- [PATCH v5 34/65] kvm/tdx: Ignore memory conversion to shared of unassigned region, Xiaoyao Li, 2024/02/29
- [PATCH v5 35/65] memory: Introduce memory_region_init_ram_guest_memfd(), Xiaoyao Li, 2024/02/29
- [PATCH v5 29/65] i386/tdx: Validate TD attributes,
Xiaoyao Li <=
- [PATCH v5 28/65] i386/tdx: Disable pmu for TD guest, Xiaoyao Li, 2024/02/29
- [PATCH v5 37/65] i386/tdvf: Introduce function to parse TDVF metadata, Xiaoyao Li, 2024/02/29
- [PATCH v5 39/65] i386/tdx: Skip BIOS shadowing setup, Xiaoyao Li, 2024/02/29
- [PATCH v5 36/65] i386/tdx: load TDVF for TD guest, Xiaoyao Li, 2024/02/29
- [PATCH v5 38/65] i386/tdx: Parse TDVF metadata for TDX VM, Xiaoyao Li, 2024/02/29
- [PATCH v5 40/65] i386/tdx: Don't initialize pc.rom for TDX VMs, Xiaoyao Li, 2024/02/29
- [PATCH v5 41/65] i386/tdx: Track mem_ptr for each firmware entry of TDVF, Xiaoyao Li, 2024/02/29
- [PATCH v5 42/65] i386/tdx: Track RAM entries for TDX VM, Xiaoyao Li, 2024/02/29
- [PATCH v5 44/65] i386/tdx: Setup the TD HOB list, Xiaoyao Li, 2024/02/29
- [PATCH v5 43/65] headers: Add definitions from UEFI spec for volumes, resources, etc..., Xiaoyao Li, 2024/02/29