From 98664e45d3c78795f7632330d46029309f92214e Mon Sep 17 00:00:00 2001 From: OuyangHang33 <hank.ouyang@intel.com> Date: Mon, 26 Feb 2024 22:59:29 +0800 Subject: [PATCH] Create td-shim-interface crate for publishig Signed-off-by: OuyangHang33 <hank.ouyang@intel.com> --- Cargo.toml | 1 + Makefile | 2 +- sh_script/fuzzing.sh | 2 +- sh_script/rudra.sh | 2 +- td-layout/Cargo.toml | 2 +- td-payload/Cargo.toml | 2 +- td-payload/src/acpi.rs | 2 +- td-payload/src/bin/example/main.rs | 4 +- td-payload/src/hob.rs | 2 +- td-payload/src/mm/mod.rs | 2 +- td-shim-interface/Cargo.toml | 18 +++ td-shim-interface/README.md | 35 +++++ {td-shim => td-shim-interface}/src/acpi.rs | 0 .../src}/fuzz/Cargo.toml | 0 .../src}/fuzz/fuzz_targets/afl_cfv_parser.rs | 0 .../src}/fuzz/fuzz_targets/afl_hob_parser.rs | 0 .../fuzz/fuzz_targets/afl_payload_parser.rs | 0 .../src}/fuzz/fuzz_targets/cfv_parser.rs | 0 .../src}/fuzz/fuzz_targets/fuzzlib.rs | 2 +- .../src}/fuzz/fuzz_targets/hob_parser.rs | 0 .../src}/fuzz/fuzz_targets/payload_parser.rs | 0 .../src}/fuzz/seeds/cfv_parser/cfv | Bin .../src}/fuzz/seeds/hob_parser/hob_buffer | Bin .../src}/fuzz/seeds/payload_parser/fv_buffer | Bin td-shim-interface/src/lib.rs | 134 ++++++++++++++++++ .../src/metadata.rs | 2 +- .../src/td_uefi_pi}/fv.rs | 0 .../src/td_uefi_pi}/hob.rs | 0 .../src/td_uefi_pi/mod.rs | 1 - .../src/td_uefi_pi}/pi/boot_mode.rs | 0 .../src/td_uefi_pi}/pi/fv.rs | 0 .../src/td_uefi_pi}/pi/guid.rs | 0 .../src/td_uefi_pi}/pi/hob.rs | 0 .../src/td_uefi_pi}/pi/mod.rs | 0 td-shim-tools/Cargo.toml | 2 +- td-shim-tools/src/bin/td-shim-checker/main.rs | 2 +- td-shim-tools/src/bin/td-shim-enroll/main.rs | 2 +- td-shim-tools/src/enroller.rs | 4 +- td-shim-tools/src/linker.rs | 4 +- td-shim-tools/src/loader.rs | 2 +- td-shim-tools/src/metadata.rs | 6 +- td-shim-tools/src/tee_info_hash.rs | 2 +- td-shim/Cargo.toml | 2 +- td-shim/src/bin/td-shim/acpi.rs | 2 +- td-shim/src/bin/td-shim/main.rs | 4 +- td-shim/src/bin/td-shim/memory.rs | 6 +- td-shim/src/bin/td-shim/mp.rs | 2 +- td-shim/src/bin/td-shim/payload_hob.rs | 4 +- td-shim/src/bin/td-shim/shim_info.rs | 8 +- td-shim/src/fv.rs | 2 +- td-shim/src/lib.rs | 4 +- td-shim/src/reset_vector.rs | 4 +- td-shim/src/secure_boot.rs | 2 +- td-uefi-pi/Cargo.toml | 13 -- tests/test-td-payload/Cargo.toml | 2 +- tests/test-td-payload/src/main.rs | 2 +- tests/test-td-payload/src/testacpi.rs | 4 +- tests/test-td-payload/src/testmemmap.rs | 2 +- tests/test-td-payload/src/testtrustedboot.rs | 4 +- 59 files changed, 239 insertions(+), 65 deletions(-) create mode 100644 td-shim-interface/Cargo.toml create mode 100644 td-shim-interface/README.md rename {td-shim => td-shim-interface}/src/acpi.rs (100%) rename {td-uefi-pi => td-shim-interface/src}/fuzz/Cargo.toml (100%) rename {td-uefi-pi => td-shim-interface/src}/fuzz/fuzz_targets/afl_cfv_parser.rs (100%) rename {td-uefi-pi => td-shim-interface/src}/fuzz/fuzz_targets/afl_hob_parser.rs (100%) rename {td-uefi-pi => td-shim-interface/src}/fuzz/fuzz_targets/afl_payload_parser.rs (100%) rename {td-uefi-pi => td-shim-interface/src}/fuzz/fuzz_targets/cfv_parser.rs (100%) rename {td-uefi-pi => td-shim-interface/src}/fuzz/fuzz_targets/fuzzlib.rs (97%) rename {td-uefi-pi => td-shim-interface/src}/fuzz/fuzz_targets/hob_parser.rs (100%) rename {td-uefi-pi => td-shim-interface/src}/fuzz/fuzz_targets/payload_parser.rs (100%) rename {td-uefi-pi => td-shim-interface/src}/fuzz/seeds/cfv_parser/cfv (100%) rename {td-uefi-pi => td-shim-interface/src}/fuzz/seeds/hob_parser/hob_buffer (100%) rename {td-uefi-pi => td-shim-interface/src}/fuzz/seeds/payload_parser/fv_buffer (100%) create mode 100644 td-shim-interface/src/lib.rs rename {td-shim => td-shim-interface}/src/metadata.rs (99%) rename {td-uefi-pi/src => td-shim-interface/src/td_uefi_pi}/fv.rs (100%) rename {td-uefi-pi/src => td-shim-interface/src/td_uefi_pi}/hob.rs (100%) rename td-uefi-pi/src/lib.rs => td-shim-interface/src/td_uefi_pi/mod.rs (99%) rename {td-uefi-pi/src => td-shim-interface/src/td_uefi_pi}/pi/boot_mode.rs (100%) rename {td-uefi-pi/src => td-shim-interface/src/td_uefi_pi}/pi/fv.rs (100%) rename {td-uefi-pi/src => td-shim-interface/src/td_uefi_pi}/pi/guid.rs (100%) rename {td-uefi-pi/src => td-shim-interface/src/td_uefi_pi}/pi/hob.rs (100%) rename {td-uefi-pi/src => td-shim-interface/src/td_uefi_pi}/pi/mod.rs (100%) delete mode 100644 td-uefi-pi/Cargo.toml diff --git a/Cargo.toml b/Cargo.toml index 52622029..31469800 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -19,6 +19,7 @@ members = [ "tests/test-td-paging", "tests/test-td-payload", "xtask", + "td-shim-interface", ] # the profile used for debug build of `td-shim` and `td-payload` diff --git a/Makefile b/Makefile index 3f3320f5..6499c964 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ else export BUILD_TYPE_FLAG= endif -GENERIC_LIB_CRATES = td-layout td-logger td-uefi-pi td-loader cc-measurement +GENERIC_LIB_CRATES = td-layout td-logger td-shim-interface td-loader cc-measurement NIGHTLY_LIB_CRATES = td-exception td-paging tdx-tdcall SHIM_CRATES = td-shim td-payload TEST_CRATES = test-td-exception test-td-paging diff --git a/sh_script/fuzzing.sh b/sh_script/fuzzing.sh index 446e52bc..4af7586a 100644 --- a/sh_script/fuzzing.sh +++ b/sh_script/fuzzing.sh @@ -8,7 +8,7 @@ readonly script_name=${0##*/} fuzz_folder=( "td-loader" - "td-uefi-pi" + "td-shim-interface/src" "td-shim" ) diff --git a/sh_script/rudra.sh b/sh_script/rudra.sh index b10c8e5a..b88a5dfb 100644 --- a/sh_script/rudra.sh +++ b/sh_script/rudra.sh @@ -25,7 +25,7 @@ paths=( "td-paging" "td-payload" "td-shim" - "td-uefi-pi" + "td-shim-interface/src" "td-shim-tools" "tdx-tdcall" ) diff --git a/td-layout/Cargo.toml b/td-layout/Cargo.toml index 2e636bdc..1d525b0c 100644 --- a/td-layout/Cargo.toml +++ b/td-layout/Cargo.toml @@ -12,7 +12,7 @@ edition = "2018" [dependencies] scroll = { version = "0.10", default-features = false, features = ["derive"]} log = "0.4.13" -td-uefi-pi = { path = "../td-uefi-pi" } +td-shim-interface = { path = "../td-shim-interface" } [dev-dependencies] memoffset = "0.6" \ No newline at end of file diff --git a/td-payload/Cargo.toml b/td-payload/Cargo.toml index 75a759fe..4604e3ea 100644 --- a/td-payload/Cargo.toml +++ b/td-payload/Cargo.toml @@ -23,7 +23,7 @@ serde_json = { version = "1.0", default-features = false, features = ["alloc"] } spin = "0.9" td-logger = { path = "../td-logger" } td-shim = { path = "../td-shim", default-features = false } -td-uefi-pi = { path = "../td-uefi-pi" } +td-shim-interface = { path = "../td-shim-interface" } td-exception = { path = "../td-exception" } td-paging = { path = "../td-paging" } x86 = "0.47.0" diff --git a/td-payload/src/acpi.rs b/td-payload/src/acpi.rs index 6fbbf2f0..bd6fe523 100644 --- a/td-payload/src/acpi.rs +++ b/td-payload/src/acpi.rs @@ -6,7 +6,7 @@ use alloc::vec::Vec; use scroll::Pread; use spin::Once; use td_shim::TD_ACPI_TABLE_HOB_GUID; -use td_uefi_pi::{ +use td_shim_interface::td_uefi_pi::{ hob as hob_lib, pi::hob::{GuidExtension, Header, HOB_TYPE_END_OF_HOB_LIST, HOB_TYPE_GUID_EXTENSION}, }; diff --git a/td-payload/src/bin/example/main.rs b/td-payload/src/bin/example/main.rs index 50c19581..36dd2053 100644 --- a/td-payload/src/bin/example/main.rs +++ b/td-payload/src/bin/example/main.rs @@ -26,8 +26,8 @@ use td_payload as _; use td_payload::println; use td_shim::e820::{E820Entry, E820Type}; use td_shim::{TD_ACPI_TABLE_HOB_GUID, TD_E820_TABLE_HOB_GUID}; -use td_uefi_pi::hob; -use td_uefi_pi::pi; +use td_shim_interface::td_uefi_pi::hob; +use td_shim_interface::td_uefi_pi::pi; use zerocopy::FromBytes; #[macro_use] diff --git a/td-payload/src/hob.rs b/td-payload/src/hob.rs index 170792b6..ab0917fc 100644 --- a/td-payload/src/hob.rs +++ b/td-payload/src/hob.rs @@ -5,7 +5,7 @@ use core::mem::size_of; use scroll::Pread; use spin::Once; -use td_uefi_pi::{ +use td_shim_interface::td_uefi_pi::{ hob::check_hob_integrity, pi::hob::{HandoffInfoTable, HOB_TYPE_HANDOFF}, }; diff --git a/td-payload/src/mm/mod.rs b/td-payload/src/mm/mod.rs index c794a1b4..d2479ae5 100644 --- a/td-payload/src/mm/mod.rs +++ b/td-payload/src/mm/mod.rs @@ -11,7 +11,7 @@ use td_shim::{ e820::{E820Entry, E820Type}, TD_E820_TABLE_HOB_GUID, }; -use td_uefi_pi::{ +use td_shim_interface::td_uefi_pi::{ hob as hob_lib, pi::hob::{GuidExtension, Header, HOB_TYPE_END_OF_HOB_LIST, HOB_TYPE_GUID_EXTENSION}, }; diff --git a/td-shim-interface/Cargo.toml b/td-shim-interface/Cargo.toml new file mode 100644 index 00000000..4ed79924 --- /dev/null +++ b/td-shim-interface/Cargo.toml @@ -0,0 +1,18 @@ +[package] +name = "td-shim-interface" +version = "0.1.0" +license = "BSD-2-Clause-Patent" +description = "TD-shim metadata data structures and related functions. UEFI Platform Initializaiton data structures and accessors" + +edition = "2018" +homepage = "https://github.com/confidential-containers/td-shim" +repository = "https://github.com/confidential-containers/td-shim" +readme = "README.md" +keywords = ["td-shim", "TDX", "intel"] + +[dependencies] +r-efi = "3.2.0" +scroll = { version = "0.10", default-features = false, features = ["derive"] } +zerocopy = { version = "0.7.31", features = ["derive"] } + +log = "0.4.13" diff --git a/td-shim-interface/README.md b/td-shim-interface/README.md new file mode 100644 index 00000000..6d72deed --- /dev/null +++ b/td-shim-interface/README.md @@ -0,0 +1,35 @@ +[](https://app.fossa.com/projects/git%2Bgithub.com%2Fconfidential-containers%2Ftd-shim?ref=badge_shield) +# TD-shim-interface - Confidential Containers Shim Firmware Interface + +## Documents + +* [TD-Shim specification](doc/tdshim_spec.md) + +* Introduction [PDF](doc/td-shim-introduction.pdf) and [conference talk](https://fosdem.org/2023/schedule/event/cc_online_rust/) + +## Introduction + +This td-shim-interface is to support user for creating data structures and functions required for td-shim, such as TdxMetadataDescriptor and TdxMetadataSection. +Td-uefi-pi is used for UEFI Platform Initializaiton data structures and accessors. + +To import the data structure of metadata, TD HOB and related function, such as: +``` +use td_shim_interface::{TD_ACPI_TABLE_HOB_GUID, TD_E820_TABLE_HOB_GUID, TD_PAYLOAD_INFO_HOB_GUID}; +use td_shim_interface::PayloadInfo; +use td_shim_interface::acpi; +use td_shim_interface::td_uefi_pi::{hob, pi, pi::guid} +``` + +This is a Shim Firmware to support [Intel TDX](https://software.intel.com/content/www/us/en/develop/articles/intel-trust-domain-extensions.html). + +The API specification is at [td-shim specification](doc/tdshim_spec.md). + +The secure boot specification for td-shim is at [secure boot specification](doc/secure_boot.md) + +The design is at [td-shim design](doc/design.md). + +The threat model analysis is at [td-shim threat model](doc/threat_model.md). + + +## License +[](https://app.fossa.com/projects/git%2Bgithub.com%2Fconfidential-containers%2Ftd-shim?ref=badge_large) diff --git a/td-shim/src/acpi.rs b/td-shim-interface/src/acpi.rs similarity index 100% rename from td-shim/src/acpi.rs rename to td-shim-interface/src/acpi.rs diff --git a/td-uefi-pi/fuzz/Cargo.toml b/td-shim-interface/src/fuzz/Cargo.toml similarity index 100% rename from td-uefi-pi/fuzz/Cargo.toml rename to td-shim-interface/src/fuzz/Cargo.toml diff --git a/td-uefi-pi/fuzz/fuzz_targets/afl_cfv_parser.rs b/td-shim-interface/src/fuzz/fuzz_targets/afl_cfv_parser.rs similarity index 100% rename from td-uefi-pi/fuzz/fuzz_targets/afl_cfv_parser.rs rename to td-shim-interface/src/fuzz/fuzz_targets/afl_cfv_parser.rs diff --git a/td-uefi-pi/fuzz/fuzz_targets/afl_hob_parser.rs b/td-shim-interface/src/fuzz/fuzz_targets/afl_hob_parser.rs similarity index 100% rename from td-uefi-pi/fuzz/fuzz_targets/afl_hob_parser.rs rename to td-shim-interface/src/fuzz/fuzz_targets/afl_hob_parser.rs diff --git a/td-uefi-pi/fuzz/fuzz_targets/afl_payload_parser.rs b/td-shim-interface/src/fuzz/fuzz_targets/afl_payload_parser.rs similarity index 100% rename from td-uefi-pi/fuzz/fuzz_targets/afl_payload_parser.rs rename to td-shim-interface/src/fuzz/fuzz_targets/afl_payload_parser.rs diff --git a/td-uefi-pi/fuzz/fuzz_targets/cfv_parser.rs b/td-shim-interface/src/fuzz/fuzz_targets/cfv_parser.rs similarity index 100% rename from td-uefi-pi/fuzz/fuzz_targets/cfv_parser.rs rename to td-shim-interface/src/fuzz/fuzz_targets/cfv_parser.rs diff --git a/td-uefi-pi/fuzz/fuzz_targets/fuzzlib.rs b/td-shim-interface/src/fuzz/fuzz_targets/fuzzlib.rs similarity index 97% rename from td-uefi-pi/fuzz/fuzz_targets/fuzzlib.rs rename to td-shim-interface/src/fuzz/fuzz_targets/fuzzlib.rs index 7a21fd68..5e455be0 100644 --- a/td-uefi-pi/fuzz/fuzz_targets/fuzzlib.rs +++ b/td-shim-interface/src/fuzz/fuzz_targets/fuzzlib.rs @@ -6,7 +6,7 @@ use core::mem::size_of; use r_efi::efi::Guid; use std::vec::Vec; -use td_uefi_pi::{fv, hob, pi}; +use td_shim_interface::td_uefi_pi::{fv, hob, pi}; const EFI_END_OF_HOB_LIST_OFFSET: usize = 48; diff --git a/td-uefi-pi/fuzz/fuzz_targets/hob_parser.rs b/td-shim-interface/src/fuzz/fuzz_targets/hob_parser.rs similarity index 100% rename from td-uefi-pi/fuzz/fuzz_targets/hob_parser.rs rename to td-shim-interface/src/fuzz/fuzz_targets/hob_parser.rs diff --git a/td-uefi-pi/fuzz/fuzz_targets/payload_parser.rs b/td-shim-interface/src/fuzz/fuzz_targets/payload_parser.rs similarity index 100% rename from td-uefi-pi/fuzz/fuzz_targets/payload_parser.rs rename to td-shim-interface/src/fuzz/fuzz_targets/payload_parser.rs diff --git a/td-uefi-pi/fuzz/seeds/cfv_parser/cfv b/td-shim-interface/src/fuzz/seeds/cfv_parser/cfv similarity index 100% rename from td-uefi-pi/fuzz/seeds/cfv_parser/cfv rename to td-shim-interface/src/fuzz/seeds/cfv_parser/cfv diff --git a/td-uefi-pi/fuzz/seeds/hob_parser/hob_buffer b/td-shim-interface/src/fuzz/seeds/hob_parser/hob_buffer similarity index 100% rename from td-uefi-pi/fuzz/seeds/hob_parser/hob_buffer rename to td-shim-interface/src/fuzz/seeds/hob_parser/hob_buffer diff --git a/td-uefi-pi/fuzz/seeds/payload_parser/fv_buffer b/td-shim-interface/src/fuzz/seeds/payload_parser/fv_buffer similarity index 100% rename from td-uefi-pi/fuzz/seeds/payload_parser/fv_buffer rename to td-shim-interface/src/fuzz/seeds/payload_parser/fv_buffer diff --git a/td-shim-interface/src/lib.rs b/td-shim-interface/src/lib.rs new file mode 100644 index 00000000..2e9fc13c --- /dev/null +++ b/td-shim-interface/src/lib.rs @@ -0,0 +1,134 @@ +// Copyright (c) 2022 Alibaba Cloud +// +// SPDX-License-Identifier: BSD-2-Clause-Patent + +#![no_std] + +use scroll::{Pread, Pwrite}; + +pub mod acpi; +pub mod metadata; +pub mod td_uefi_pi; + +use td_uefi_pi::pi::{self, guid}; + +// This GUID is used for ACPI GUID Extension HOB +// Please refer to: +// https://github.com/confidential-containers/td-shim/blob/main/doc/tdshim_spec.md#acpi-guid-extension-hob +pub const TD_ACPI_TABLE_HOB_GUID: guid::Guid = guid::Guid::from_fields( + 0x6a0c5870, + 0xd4ed, + 0x44f4, + [0xa1, 0x35, 0xdd, 0x23, 0x8b, 0x6f, 0xc, 0x8d], +); + +// This GUID is used for TD Payload Info GUID Extension HOB +// Please refer to: +// https://github.com/confidential-containers/td-shim/blob/main/doc/tdshim_spec.md#td-payload-info-guid-extension-hob +pub const TD_PAYLOAD_INFO_HOB_GUID: guid::Guid = guid::Guid::from_fields( + 0xb96fa412, + 0x461f, + 0x4be3, + [0x8c, 0xd, 0xad, 0x80, 0x5a, 0x49, 0x7a, 0xc0], +); + +// This GUID is used for E820 Memory Map GUID Extension HOB +// Please refer to: +// https://github.com/confidential-containers/td-shim/blob/main/doc/tdshim_spec.md#e820-memory-map-guid-extension-hob +pub const TD_E820_TABLE_HOB_GUID: pi::guid::Guid = pi::guid::Guid::from_fields( + 0x8f8072ea, + 0x3486, + 0x4b47, + [0x86, 0xa7, 0x23, 0x53, 0xb8, 0x8a, 0x87, 0x73], +); + +#[repr(u32)] +#[derive(Clone, Copy, Debug, Eq, PartialEq)] +pub enum TdPayloadInfoHobType { + /// Payload Binary is a PE/COFF or ELF executable image as payload. + /// + /// Entrypoint can be found by parsing the image header. This type image does not follow + /// Linux boot protocol. A payload HOB is used to pass data from TdShim to payload. + ExecutablePayload = 0, + + /// Payload Binary is bzImage, follow Linux boot protocol. + /// + /// The first 512 bytes are boot_param. (zero page). The entrypoint is start address of loaded + /// 64bit Linux kernel plus 0x200 + BzImage, + + /// Payload Binary is VMM loaded vmLinux, follow Linux boot protocol. + /// + /// The entrypoint is defined at HOB_PAYLOAD_INFO_TABLE.Entrypoint. + RawVmLinux, + + /// Unknown Image type + UnknownImage = u32::MAX, +} + +impl From<&TdPayloadInfoHobType> for u32 { + fn from(v: &TdPayloadInfoHobType) -> Self { + *v as u32 + } +} + +impl From<u32> for TdPayloadInfoHobType { + fn from(v: u32) -> Self { + match v { + 0 => TdPayloadInfoHobType::ExecutablePayload, + 1 => TdPayloadInfoHobType::BzImage, + 2 => TdPayloadInfoHobType::RawVmLinux, + _ => TdPayloadInfoHobType::UnknownImage, + } + } +} + +#[repr(C)] +#[derive(Default, Clone, Copy, Pread, Pwrite)] +pub struct PayloadInfo { + pub image_type: u32, + pub reserved: u32, + pub entry_point: u64, +} + +/// Write three bytes from an integer value into the buffer. +pub fn write_u24(data: u32, buf: &mut [u8; 3]) { + assert!(data <= 0xffffff); + buf[0] = (data & 0xFF) as u8; + buf[1] = ((data >> 8) & 0xFF) as u8; + buf[2] = ((data >> 16) & 0xFF) as u8; +} + +// To protect against speculative attacks, place the LFENCE instruction after the range +// check and branch, but before any code that consumes the checked value. +pub fn speculation_barrier() { + unsafe { core::arch::asm!("lfence") } +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_tdpayload_info_hob_type() { + assert_eq!( + TdPayloadInfoHobType::from(0), + TdPayloadInfoHobType::ExecutablePayload + ); + assert_eq!(TdPayloadInfoHobType::from(1), TdPayloadInfoHobType::BzImage); + assert_eq!( + TdPayloadInfoHobType::from(2), + TdPayloadInfoHobType::RawVmLinux + ); + assert_eq!( + TdPayloadInfoHobType::from(3), + TdPayloadInfoHobType::UnknownImage + ); + } + + #[test] + fn test_write_u24() { + let mut buf: [u8; 3] = [0; 3]; + write_u24(0xffffff, &mut buf); + } +} diff --git a/td-shim/src/metadata.rs b/td-shim-interface/src/metadata.rs similarity index 99% rename from td-shim/src/metadata.rs rename to td-shim-interface/src/metadata.rs index 7a7fb34a..3b0bbabe 100644 --- a/td-shim/src/metadata.rs +++ b/td-shim-interface/src/metadata.rs @@ -4,10 +4,10 @@ extern crate alloc; +use crate::td_uefi_pi::pi::guid::Guid; use alloc::string::String; use core::{ptr::slice_from_raw_parts, str::FromStr}; use scroll::{Pread, Pwrite}; -use td_uefi_pi::pi::guid::Guid; /// TDX Metadata GUID defined in td-shim specification pub const TDX_METADATA_GUID_STR: &str = "E9EAF9F3-168E-44D5-A8EB-7F4D8738F6AE"; diff --git a/td-uefi-pi/src/fv.rs b/td-shim-interface/src/td_uefi_pi/fv.rs similarity index 100% rename from td-uefi-pi/src/fv.rs rename to td-shim-interface/src/td_uefi_pi/fv.rs diff --git a/td-uefi-pi/src/hob.rs b/td-shim-interface/src/td_uefi_pi/hob.rs similarity index 100% rename from td-uefi-pi/src/hob.rs rename to td-shim-interface/src/td_uefi_pi/hob.rs diff --git a/td-uefi-pi/src/lib.rs b/td-shim-interface/src/td_uefi_pi/mod.rs similarity index 99% rename from td-uefi-pi/src/lib.rs rename to td-shim-interface/src/td_uefi_pi/mod.rs index 0aef5ef4..30c350ca 100644 --- a/td-uefi-pi/src/lib.rs +++ b/td-shim-interface/src/td_uefi_pi/mod.rs @@ -21,7 +21,6 @@ //! //! Constants and data structures defined by [UEFI PI Spec] are hosted by [crate::pi], functions //! to access them are hosted by [crate::fv] and [crate::hob]. -#![no_std] pub mod fv; pub mod hob; diff --git a/td-uefi-pi/src/pi/boot_mode.rs b/td-shim-interface/src/td_uefi_pi/pi/boot_mode.rs similarity index 100% rename from td-uefi-pi/src/pi/boot_mode.rs rename to td-shim-interface/src/td_uefi_pi/pi/boot_mode.rs diff --git a/td-uefi-pi/src/pi/fv.rs b/td-shim-interface/src/td_uefi_pi/pi/fv.rs similarity index 100% rename from td-uefi-pi/src/pi/fv.rs rename to td-shim-interface/src/td_uefi_pi/pi/fv.rs diff --git a/td-uefi-pi/src/pi/guid.rs b/td-shim-interface/src/td_uefi_pi/pi/guid.rs similarity index 100% rename from td-uefi-pi/src/pi/guid.rs rename to td-shim-interface/src/td_uefi_pi/pi/guid.rs diff --git a/td-uefi-pi/src/pi/hob.rs b/td-shim-interface/src/td_uefi_pi/pi/hob.rs similarity index 100% rename from td-uefi-pi/src/pi/hob.rs rename to td-shim-interface/src/td_uefi_pi/pi/hob.rs diff --git a/td-uefi-pi/src/pi/mod.rs b/td-shim-interface/src/td_uefi_pi/pi/mod.rs similarity index 100% rename from td-uefi-pi/src/pi/mod.rs rename to td-shim-interface/src/td_uefi_pi/pi/mod.rs diff --git a/td-shim-tools/Cargo.toml b/td-shim-tools/Cargo.toml index a4e7f572..5a55b177 100644 --- a/td-shim-tools/Cargo.toml +++ b/td-shim-tools/Cargo.toml @@ -42,7 +42,7 @@ regex = "1" scroll = { version = "0.10", default-features = false, features = ["derive"]} td-layout = { path = "../td-layout" } td-shim = { path = "../td-shim", default-features = false } -td-uefi-pi = { path = "../td-uefi-pi" } +td-shim-interface = { path = "../td-shim-interface" } cfg-if = "1.0" anyhow = { version = "1.0.68", optional = true } diff --git a/td-shim-tools/src/bin/td-shim-checker/main.rs b/td-shim-tools/src/bin/td-shim-checker/main.rs index 8046171e..13763c78 100644 --- a/td-shim-tools/src/bin/td-shim-checker/main.rs +++ b/td-shim-tools/src/bin/td-shim-checker/main.rs @@ -10,7 +10,7 @@ use log::{error, LevelFilter}; use std::str::FromStr; use std::vec::Vec; use std::{env, io}; -use td_shim::metadata::{TdxMetadataDescriptor, TdxMetadataSection}; +use td_shim_interface::metadata::{TdxMetadataDescriptor, TdxMetadataSection}; use td_shim_tools::loader::TdShimLoader; struct Config { diff --git a/td-shim-tools/src/bin/td-shim-enroll/main.rs b/td-shim-tools/src/bin/td-shim-enroll/main.rs index 3b536a69..8f2a5d05 100644 --- a/td-shim-tools/src/bin/td-shim-enroll/main.rs +++ b/td-shim-tools/src/bin/td-shim-enroll/main.rs @@ -11,9 +11,9 @@ use std::path::PathBuf; use std::str::FromStr; use std::vec::Vec; use std::{env, io, path::Path}; +use td_shim_interface::td_uefi_pi::pi::guid; use td_shim_tools::enroller::{create_key_file, enroll_files, FirmwareRawFile}; use td_shim_tools::InputData; -use td_uefi_pi::pi::guid; const TDSHIM_SB_NAME: &str = "final.sb.bin"; struct Config { diff --git a/td-shim-tools/src/enroller.rs b/td-shim-tools/src/enroller.rs index 50605337..9af2eae7 100644 --- a/td-shim-tools/src/enroller.rs +++ b/td-shim-tools/src/enroller.rs @@ -18,7 +18,7 @@ use td_shim::secure_boot::{ PUBKEY_FILE_STRUCT_VERSION_V1, PUBKEY_HASH_ALGORITHM_SHA384, }; use td_shim::write_u24; -use td_uefi_pi::pi::fv::{ +use td_shim_interface::td_uefi_pi::pi::fv::{ FIRMWARE_FILE_SYSTEM3_GUID, FVH_REVISION, FVH_SIGNATURE, FV_FILETYPE_RAW, }; @@ -298,7 +298,7 @@ mod test { use std::str::FromStr; use super::*; - use td_uefi_pi::pi::guid; + use td_shim_interface::td_uefi_pi::pi::guid; fn read_u24(data: &[u8]) -> u32 { let mut num = data[0] as u32; diff --git a/td-shim-tools/src/linker.rs b/td-shim-tools/src/linker.rs index 357e66e6..0b6a3b49 100644 --- a/td-shim-tools/src/linker.rs +++ b/td-shim-tools/src/linker.rs @@ -20,10 +20,10 @@ use td_shim::fv::{ FvFfsFileHeader, FvFfsSectionHeader, FvHeader, IplFvFfsHeader, IplFvFfsSectionHeader, IplFvHeader, }; -use td_shim::metadata::{TdxMetadataGuid, TdxMetadataPtr}; use td_shim::reset_vector::{ResetVectorHeader, ResetVectorParams}; use td_shim::write_u24; -use td_uefi_pi::pi::fv::{ +use td_shim_interface::metadata::{TdxMetadataGuid, TdxMetadataPtr}; +use td_shim_interface::td_uefi_pi::pi::fv::{ FfsFileHeader, FVH_REVISION, FVH_SIGNATURE, FV_FILETYPE_DXE_CORE, FV_FILETYPE_SECURITY_CORE, SECTION_PE32, }; diff --git a/td-shim-tools/src/loader.rs b/td-shim-tools/src/loader.rs index dca17dbb..9a63945a 100644 --- a/td-shim-tools/src/loader.rs +++ b/td-shim-tools/src/loader.rs @@ -9,7 +9,7 @@ use std::fs; use std::io; use std::io::Read; use std::io::Seek; -use td_shim::metadata::{ +use td_shim_interface::metadata::{ self, TdxMetadataDescriptor, TdxMetadataGuid, TdxMetadataSection, TDX_METADATA_DESCRIPTOR_LEN, TDX_METADATA_GUID_LEN, TDX_METADATA_OFFSET, TDX_METADATA_SECTION_LEN, }; diff --git a/td-shim-tools/src/metadata.rs b/td-shim-tools/src/metadata.rs index 896960bc..ab1c5ad5 100644 --- a/td-shim-tools/src/metadata.rs +++ b/td-shim-tools/src/metadata.rs @@ -7,14 +7,14 @@ use serde::{de, Deserialize}; use std::{mem::size_of, vec::Vec}; use td_layout::build_time::*; use td_layout::runtime::*; -use td_shim::metadata::{ +use td_shim_interface::metadata::{ TdxMetadataDescriptor, TDX_METADATA_GUID, TDX_METADATA_SECTION_TYPE_BFV, TDX_METADATA_SECTION_TYPE_CFV, TDX_METADATA_SECTION_TYPE_PAYLOAD, TDX_METADATA_SECTION_TYPE_PAYLOAD_PARAM, TDX_METADATA_SECTION_TYPE_PERM_MEM, TDX_METADATA_SECTION_TYPE_TD_HOB, TDX_METADATA_SECTION_TYPE_TD_INFO, TDX_METADATA_SECTION_TYPE_TEMP_MEM, TDX_METADATA_SIGNATURE, TDX_METADATA_VERSION, }; -use td_uefi_pi::pi::guid::Guid; +use td_shim_interface::td_uefi_pi::pi::guid::Guid; use crate::linker::PayloadType; @@ -101,7 +101,7 @@ impl MetadataSections { } fn basic_metadata_sections(payload_type: PayloadType) -> MetadataSections { - use td_shim::metadata::TDX_METADATA_ATTRIBUTES_EXTENDMR; + use td_shim_interface::metadata::TDX_METADATA_ATTRIBUTES_EXTENDMR; let mut metadata_sections = MetadataSections::new(); diff --git a/td-shim-tools/src/tee_info_hash.rs b/td-shim-tools/src/tee_info_hash.rs index ef4e11d0..3e7dabc5 100644 --- a/td-shim-tools/src/tee_info_hash.rs +++ b/td-shim-tools/src/tee_info_hash.rs @@ -14,7 +14,7 @@ use std::io::Read; use std::io::Seek; use std::io::SeekFrom; use std::mem::size_of; -use td_shim::metadata::*; +use td_shim_interface::metadata::*; use zeroize::Zeroize; pub const SHA384_DIGEST_SIZE: usize = 0x30; diff --git a/td-shim/Cargo.toml b/td-shim/Cargo.toml index 5f3f429d..f31e2b80 100644 --- a/td-shim/Cargo.toml +++ b/td-shim/Cargo.toml @@ -23,7 +23,7 @@ lazy_static = { version = "1.4.0", features = ["spin_no_std"] } r-efi = "3.2.0" scroll = { version = "0.10", default-features = false, features = ["derive"] } td-layout = { path = "../td-layout" } -td-uefi-pi = { path = "../td-uefi-pi" } +td-shim-interface = { path = "../td-shim-interface" } cc-measurement = { path = "../cc-measurement" } zerocopy = { version = "0.7.31", features = ["derive"] } diff --git a/td-shim/src/bin/td-shim/acpi.rs b/td-shim/src/bin/td-shim/acpi.rs index 980d5182..cab14141 100644 --- a/td-shim/src/bin/td-shim/acpi.rs +++ b/td-shim/src/bin/td-shim/acpi.rs @@ -5,7 +5,7 @@ extern crate alloc; use alloc::vec::Vec; -use td_shim::acpi::{calculate_checksum, Rsdp, Xsdt}; +use td_shim_interface::acpi::{calculate_checksum, Rsdp, Xsdt}; use super::*; diff --git a/td-shim/src/bin/td-shim/main.rs b/td-shim/src/bin/td-shim/main.rs index 3028f791..43ed88c1 100644 --- a/td-shim/src/bin/td-shim/main.rs +++ b/td-shim/src/bin/td-shim/main.rs @@ -30,13 +30,13 @@ use cc_measurement::{log::CcEventLogWriter, EV_EFI_HANDOFF_TABLES2, EV_PLATFORM_ use td_layout::build_time::{self, *}; use td_layout::memslice::{self, SliceType}; use td_layout::RuntimeMemoryLayout; -use td_shim::acpi::{Ccel, GenericSdtHeader}; use td_shim::event_log::{log_hob_list, log_payload_binary, log_payload_parameter}; use td_shim::{ speculation_barrier, PayloadInfo, TdPayloadInfoHobType, TD_ACPI_TABLE_HOB_GUID, TD_PAYLOAD_INFO_HOB_GUID, }; -use td_uefi_pi::{fv, hob, pi}; +use td_shim_interface::acpi::{Ccel, GenericSdtHeader}; +use td_shim_interface::td_uefi_pi::{fv, hob, pi}; use crate::ipl::ExecutablePayloadType; use crate::shim_info::{BootTimeDynamic, BootTimeStatic}; diff --git a/td-shim/src/bin/td-shim/memory.rs b/td-shim/src/bin/td-shim/memory.rs index ed454500..2283b86d 100644 --- a/td-shim/src/bin/td-shim/memory.rs +++ b/td-shim/src/bin/td-shim/memory.rs @@ -8,8 +8,8 @@ use td_layout::memslice::SliceType; use td_layout::{build_time::*, runtime::*, *}; use td_shim::e820::{E820Entry, E820Type}; use td_shim::{PayloadInfo, TdPayloadInfoHobType}; -use td_uefi_pi::hob; -use td_uefi_pi::pi::hob::{ +use td_shim_interface::td_uefi_pi::hob; +use td_shim_interface::td_uefi_pi::pi::hob::{ ResourceDescription, RESOURCE_MEMORY_RESERVED, RESOURCE_MEMORY_UNACCEPTED, RESOURCE_SYSTEM_MEMORY, }; @@ -284,7 +284,7 @@ impl<'a> Memory<'a> { #[cfg(feature = "tdx")] fn accept_memory_resources(resources: &mut Vec<ResourceDescription>) { use td_layout::TD_PAYLOAD_PARTIAL_ACCEPT_MEMORY_SIZE; - use td_uefi_pi::pi; + use td_shim_interface::td_uefi_pi::pi; // The physical address must not exceed the shared mask (the last bit of GPAW). let (index, max_phys_addr) = resources diff --git a/td-shim/src/bin/td-shim/mp.rs b/td-shim/src/bin/td-shim/mp.rs index c7a4fa52..f9465508 100644 --- a/td-shim/src/bin/td-shim/mp.rs +++ b/td-shim/src/bin/td-shim/mp.rs @@ -6,7 +6,7 @@ use core::convert::TryInto; use core::mem::size_of; use zerocopy::{AsBytes, FromBytes, FromZeroes}; -use td_shim::acpi::{self, GenericSdtHeader}; +use td_shim_interface::acpi::{self, GenericSdtHeader}; // 255 vCPUs needs 2278 bytes, refer to create_madt(). const MADT_MAX_SIZE: usize = 0xc00; diff --git a/td-shim/src/bin/td-shim/payload_hob.rs b/td-shim/src/bin/td-shim/payload_hob.rs index 24727fd0..7b474490 100644 --- a/td-shim/src/bin/td-shim/payload_hob.rs +++ b/td-shim/src/bin/td-shim/payload_hob.rs @@ -11,8 +11,8 @@ use td_layout::build_time::*; use td_layout::runtime::*; use td_shim::e820::E820Type; use td_shim::{TD_ACPI_TABLE_HOB_GUID, TD_E820_TABLE_HOB_GUID}; -use td_uefi_pi::pi::hob::ResourceDescription; -use td_uefi_pi::{hob, pi, pi::guid}; +use td_shim_interface::td_uefi_pi::pi::hob::ResourceDescription; +use td_shim_interface::td_uefi_pi::{hob, pi, pi::guid}; #[derive(Debug)] pub enum PayloadHobError { diff --git a/td-shim/src/bin/td-shim/shim_info.rs b/td-shim/src/bin/td-shim/shim_info.rs index 9f0deffe..30e10686 100644 --- a/td-shim/src/bin/td-shim/shim_info.rs +++ b/td-shim/src/bin/td-shim/shim_info.rs @@ -9,14 +9,14 @@ use log::error; use scroll::{Pread, Pwrite}; use td_layout::build_time::{TD_SHIM_FIRMWARE_BASE, TD_SHIM_FIRMWARE_SIZE}; use td_layout::memslice; -use td_shim::metadata::*; use td_shim::speculation_barrier; use td_shim::{ PayloadInfo, TdPayloadInfoHobType, TD_ACPI_TABLE_HOB_GUID, TD_PAYLOAD_INFO_HOB_GUID, }; -use td_uefi_pi::pi::guid::Guid; -use td_uefi_pi::pi::hob::*; -use td_uefi_pi::{fv, hob, pi}; +use td_shim_interface::metadata::*; +use td_shim_interface::td_uefi_pi::pi::guid::Guid; +use td_shim_interface::td_uefi_pi::pi::hob::*; +use td_shim_interface::td_uefi_pi::{fv, hob, pi}; pub struct BootTimeStatic { sections: Vec<TdxMetadataSection>, diff --git a/td-shim/src/fv.rs b/td-shim/src/fv.rs index c0f960e2..dc2767f1 100644 --- a/td-shim/src/fv.rs +++ b/td-shim/src/fv.rs @@ -8,7 +8,7 @@ use core::ptr::slice_from_raw_parts; use r_efi::efi::Guid; use scroll::{Pread, Pwrite}; -use td_uefi_pi::pi::fv::{ +use td_shim_interface::td_uefi_pi::pi::fv::{ Checksum, CommonSectionHeader, FfsFileHeader, FirmwareVolumeExtHeader, FirmwareVolumeHeader, FvBlockMap, FIRMWARE_FILE_SYSTEM2_GUID, FVH_SIGNATURE, FV_FILETYPE_FFS_PAD, }; diff --git a/td-shim/src/lib.rs b/td-shim/src/lib.rs index 03acda48..b2a2b141 100644 --- a/td-shim/src/lib.rs +++ b/td-shim/src/lib.rs @@ -6,13 +6,11 @@ use scroll::{Pread, Pwrite}; -use td_uefi_pi::pi::{self, guid}; +use td_shim_interface::td_uefi_pi::pi::{self, guid}; -pub mod acpi; pub mod e820; pub mod event_log; pub mod fv; -pub mod metadata; pub mod reset_vector; #[cfg(feature = "secure-boot")] diff --git a/td-shim/src/reset_vector.rs b/td-shim/src/reset_vector.rs index 4da0e187..328de5bf 100644 --- a/td-shim/src/reset_vector.rs +++ b/td-shim/src/reset_vector.rs @@ -8,7 +8,9 @@ use core::ptr::slice_from_raw_parts; use r_efi::efi::Guid; use scroll::{Pread, Pwrite}; use td_layout::build_time::TD_SHIM_RESET_VECTOR_SIZE; -use td_uefi_pi::pi::fv::{CommonSectionHeader, FfsFileHeader, FV_FILETYPE_RAW, SECTION_RAW}; +use td_shim_interface::td_uefi_pi::pi::fv::{ + CommonSectionHeader, FfsFileHeader, FV_FILETYPE_RAW, SECTION_RAW, +}; use crate::write_u24; diff --git a/td-shim/src/secure_boot.rs b/td-shim/src/secure_boot.rs index 0587a73d..50db53e5 100644 --- a/td-shim/src/secure_boot.rs +++ b/td-shim/src/secure_boot.rs @@ -21,7 +21,7 @@ use ring::{ signature::{self, UnparsedPublicKey, VerificationAlgorithm}, }; use scroll::{Pread, Pwrite}; -use td_uefi_pi::{fv, pi}; +use td_shim_interface::td_uefi_pi::{fv, pi}; /// GUID for secure boot trust anchor in the Configuration Firmware Volume (CFV). pub const CFV_FFS_HEADER_TRUST_ANCHOR_GUID: Guid = Guid::from_fields( diff --git a/td-uefi-pi/Cargo.toml b/td-uefi-pi/Cargo.toml deleted file mode 100644 index 0c9c1050..00000000 --- a/td-uefi-pi/Cargo.toml +++ /dev/null @@ -1,13 +0,0 @@ -[package] -name = "td-uefi-pi" -version = "0.1.0" -description = "UEFI Platform Initializaiton data structures and accessors" -repository = "https://github.com/confidential-containers/td-shim" -homepage = "https://github.com/confidential-containers" -license = "BSD-2-Clause-Patent" -edition = "2018" - -[dependencies] -log = "0.4.13" -r-efi = "3.2.0" -scroll = { version = "0.10", default-features = false, features = ["derive"] } diff --git a/tests/test-td-payload/Cargo.toml b/tests/test-td-payload/Cargo.toml index 31264841..1fa6cda8 100644 --- a/tests/test-td-payload/Cargo.toml +++ b/tests/test-td-payload/Cargo.toml @@ -13,7 +13,7 @@ r-efi = "3.2.0" linked_list_allocator = "0.10.4" log = "0.4.13" cc-measurement = { path = "../../cc-measurement" } -td-uefi-pi = { path = "../../td-uefi-pi" } +td-shim-interface = { path = "../../td-shim-interface" } tdx-tdcall = { path = "../../tdx-tdcall" , optional = true } td-logger = { path = "../../td-logger" } td-layout = { path = "../../td-layout" } diff --git a/tests/test-td-payload/src/main.rs b/tests/test-td-payload/src/main.rs index 10cb1313..e54305c6 100644 --- a/tests/test-td-payload/src/main.rs +++ b/tests/test-td-payload/src/main.rs @@ -52,7 +52,7 @@ use td_payload as _; use td_payload::print; use td_shim::e820::{E820Entry, E820Type}; use td_shim::{TD_ACPI_TABLE_HOB_GUID, TD_E820_TABLE_HOB_GUID}; -use td_uefi_pi::{fv, hob, pi}; +use td_shim_interface::td_uefi_pi::{fv, hob, pi}; use zerocopy::FromBytes; const E820_TABLE_SIZE: usize = 128; diff --git a/tests/test-td-payload/src/testacpi.rs b/tests/test-td-payload/src/testacpi.rs index 00b0bfb2..0c688f97 100644 --- a/tests/test-td-payload/src/testacpi.rs +++ b/tests/test-td-payload/src/testacpi.rs @@ -12,9 +12,9 @@ use core::ffi::c_void; use core::mem::size_of; use serde::{Deserialize, Serialize}; use td_payload::hob::get_hob; -use td_shim::acpi::GenericSdtHeader; use td_shim::TD_ACPI_TABLE_HOB_GUID; -use td_uefi_pi::hob; +use td_shim_interface::acpi::GenericSdtHeader; +use td_shim_interface::td_uefi_pi::hob; use zerocopy::{AsBytes, FromBytes}; #[derive(Debug, Serialize, Deserialize)] diff --git a/tests/test-td-payload/src/testmemmap.rs b/tests/test-td-payload/src/testmemmap.rs index 3816b484..f7b10a51 100644 --- a/tests/test-td-payload/src/testmemmap.rs +++ b/tests/test-td-payload/src/testmemmap.rs @@ -15,7 +15,7 @@ use serde::{Deserialize, Serialize}; use td_payload::hob::get_hob; use td_shim::e820::{self, E820Entry, E820Type}; use td_shim::TD_E820_TABLE_HOB_GUID; -use td_uefi_pi::hob; +use td_shim_interface::td_uefi_pi::hob; use zerocopy::{AsBytes, FromBytes}; #[derive(Debug, Serialize, Deserialize)] diff --git a/tests/test-td-payload/src/testtrustedboot.rs b/tests/test-td-payload/src/testtrustedboot.rs index 9864eec9..072a6c8f 100644 --- a/tests/test-td-payload/src/testtrustedboot.rs +++ b/tests/test-td-payload/src/testtrustedboot.rs @@ -12,10 +12,10 @@ use core::{convert::TryInto, ffi::c_void, mem::size_of}; use ring::digest; use scroll::Pread; use td_payload::hob::get_hob; -use td_shim::acpi::{Ccel, GenericSdtHeader}; use td_shim::event_log::CCEL_CC_TYPE_TDX; use td_shim::TD_ACPI_TABLE_HOB_GUID; -use td_uefi_pi::hob; +use td_shim_interface::acpi::{Ccel, GenericSdtHeader}; +use td_shim_interface::td_uefi_pi::hob; use tdx_tdcall::tdreport; use zerocopy::{AsBytes, FromBytes};