openhcl: add direct TVM host certification flow#4007
Conversation
There was a problem hiding this comment.
Pull request overview
Adds an opt-in “direct TVM host certification” path for Host (non-isolated) attestation by introducing a host-certified TVM report type and plumbing a new Management VTL feature flag + OpenHCL option through to the TPM AK-cert request flow. This extends existing IGVM attestation request generation while preserving the legacy Trusted Launch behavior of requesting zero report bytes.
Changes:
- Add a new Management VTL feature flag (
tvm_host_certification) and validate its default/bit position. - Plumb
HCL_TVM_HOST_CERTIFICATIONthroughunderhill_coreinto TPM AK-cert request generation and attestation-type selection. - Introduce a Host-certified TVM report variant and a new
tee_call::HostCallimplementation that reuses the VBS report hypercall and returns a fixed 396-byte report.
Reviewed changes
Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| vm/devices/get/get_protocol/src/dps_json.rs | Adds tvm_host_certification to ManagementVtlFeatures and a unit test asserting it maps to bit 5 and defaults off. |
| petri/src/vm/hyperv/powershell.rs | Mirrors the new Management VTL feature flag in Hyper-V PS flag packing. |
| openhcl/underhill_core/src/worker.rs | Plumbs the flag into DPS config and uses it to select the Host AK-cert request/attestation path. |
| openhcl/underhill_core/src/options.rs | Adds parsing/storage for HCL_TVM_HOST_CERTIFICATION. |
| openhcl/underhill_core/src/lib.rs | Threads the new option into worker launch configuration. |
| openhcl/underhill_core/src/emuplat/tpm.rs | Extends TPM AK-cert request helper plumbing to carry the host-certification switch and resolve tee_call::HostCall. |
| openhcl/underhill_attestation/src/igvm_attest/mod.rs | Adds ReportType::TvmHostCertified, maps it through request creation, and adds tests for legacy vs host-certified request sizing. |
| openhcl/tee_call/src/lib.rs | Adds TeeType::Host, factors VBS report retrieval into a helper, and implements HostCall returning a fixed 396-byte report. |
| /// Size of `TVM_REPORT_V1`. | ||
| pub const TVM_REPORT_SIZE: usize = 396; | ||
|
|
| &self, | ||
| report_data: &[u8; REPORT_DATA_SIZE], | ||
| ) -> Result<GetAttestationReportResult, Error> { | ||
| let report = get_vbs_vm_report(report_data)?; |
There was a problem hiding this comment.
why do we need this additional API if it does the same as VBS?
| let report = get_vbs_vm_report(report_data)?; | ||
|
|
||
| Ok(GetAttestationReportResult { | ||
| report: report[..TVM_REPORT_SIZE].to_vec(), |
There was a problem hiding this comment.
AFAIK, currently TVM_REPORT_SIZE is 0
| TeeType::Tdx => ReportType::Tdx, | ||
| TeeType::Cca => ReportType::Cca, | ||
| TeeType::Vbs => ReportType::Vbs, | ||
| TeeType::Host => ReportType::TvmHostCertified, |
There was a problem hiding this comment.
Having a Host TeeType is a bit confusing
|
@harshvirMangla please read the following Contributor License Agreement(CLA). If you agree with the CLA, please reply with the following information.
Contributor License AgreementContribution License AgreementThis Contribution License Agreement (“Agreement”) is agreed to by the party signing below (“You”),
|
Summary
Validation
Dependencies
Requires the matching os.2020 SVC and VID producer plus IGVM Agent, Provisioner, A-LPI, and MAA changes.