diff --git a/tools/Makefile b/tools/Makefile index 8c7ff426..5c0257df 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -1,4 +1,5 @@ SGX_MODE ?= HW +MS_BUFFER ?= 0 BUILD_DIR := build .PHONY: all format format-check clean diff --git a/tools/gen_internal_conf/Cargo.toml b/tools/gen_internal_conf/Cargo.toml index c30e564b..4767e226 100644 --- a/tools/gen_internal_conf/Cargo.toml +++ b/tools/gen_internal_conf/Cargo.toml @@ -6,6 +6,10 @@ edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +[features] +default = [] +ms_buffer = [] + [dependencies] clap = "2.33" serde = "1.0" @@ -14,4 +18,4 @@ serde_derive = "1.0" log = "0.4" env_logger = "0.7" serde-xml-rs = "0.4" -regex = "1" \ No newline at end of file +regex = "1" diff --git a/tools/gen_internal_conf/Makefile b/tools/gen_internal_conf/Makefile index 6d70fc61..33b0c801 100644 --- a/tools/gen_internal_conf/Makefile +++ b/tools/gen_internal_conf/Makefile @@ -5,14 +5,19 @@ RUST_TARGET_DIR := $(BUILD_DIR)/internal/tools/genconf/cargo-target RUST_OUT_DIR := $(BUILD_DIR)/bin TARGET_BINARY := $(RUST_OUT_DIR)/gen_internal_conf +CONF_FEATURES := +ifeq ($(MS_BUFFER), 1) + CONF_FEATURES += ms_buffer +endif + .PHONY: all clean all: $(SRC_FILES) ifeq ($(OCCLUM_RELEASE_BUILD), 1) - @RUSTC_BOOTSTRAP=1 cargo build --release --target-dir=$(RUST_TARGET_DIR) -Z unstable-options --out-dir=$(RUST_OUT_DIR) + @RUSTC_BOOTSTRAP=1 cargo build --release --target-dir=$(RUST_TARGET_DIR) -Z unstable-options --out-dir=$(RUST_OUT_DIR) --features "$(CONF_FEATURES)" @echo "CARGO (release) => gen_internal_conf" else - @RUSTC_BOOTSTRAP=1 cargo build --target-dir=$(RUST_TARGET_DIR) -Z unstable-options --out-dir=$(RUST_OUT_DIR) + @RUSTC_BOOTSTRAP=1 cargo build --target-dir=$(RUST_TARGET_DIR) -Z unstable-options --out-dir=$(RUST_OUT_DIR) --features "$(CONF_FEATURES)" @echo "CARGO (debug) => gen_internal_conf" endif diff --git a/tools/gen_internal_conf/src/main.rs b/tools/gen_internal_conf/src/main.rs index f89eeb4b..56847763 100644 --- a/tools/gen_internal_conf/src/main.rs +++ b/tools/gen_internal_conf/src/main.rs @@ -154,8 +154,28 @@ fn main() { ); return; } + #[cfg(feature = "ms_buffer")] + let marshal_buffer_size = if occlum_config.resource_limits.marshal_buffer_size.is_some() { + let marshal_buffer_size = parse_memory_size( + occlum_config + .resource_limits + .marshal_buffer_size + .as_ref() + .unwrap(), + ); + if marshal_buffer_size.is_err() { + println!( + "The marshal_buffer_size \"{}\" is not correct.", + occlum_config.resource_limits.marshal_buffer_size.unwrap() + ); + return; + } + marshal_buffer_size.unwrap() + } else { + 0x10_0000 + }; - let kss_tuple = parse_kss_conf(&occlum_config); + let kss_tuple = parse_kss_conf(&occlum_config); // Generate the enclave configuration let sgx_enclave_configuration = EnclaveConfiguration { @@ -177,6 +197,8 @@ fn main() { ReservedMemMinSize: user_space_size.unwrap() as u64, ReservedMemInitSize: user_space_size.unwrap() as u64, ReservedMemExecutable: 1, + #[cfg(feature = "ms_buffer")] + MarshalBufferSize: marshal_buffer_size as u64, EnableKSS: kss_tuple.0, ISVEXTPRODID_H: kss_tuple.1, ISVEXTPRODID_L: kss_tuple.2, @@ -303,17 +325,15 @@ fn get_u64_id_high_and_low(id: &OcclumMetaID) -> (u64, u64) { } // Return a tuple (EnableKSS, ISVEXTPRODID_H, ISVEXTPRODID_L, ISVFAMILYID_H, ISVFAMILYID_L) -fn parse_kss_conf(occlum_config: &OcclumConfiguration -) -> (u32, u64, u64, u64, u64) -{ +fn parse_kss_conf(occlum_config: &OcclumConfiguration) -> (u32, u64, u64, u64, u64) { match occlum_config.metadata.enable_kss { true => { let ext_prod_id = get_u64_id_high_and_low(&occlum_config.metadata.ext_prod_id); let family_id = get_u64_id_high_and_low(&occlum_config.metadata.family_id); (1, ext_prod_id.0, ext_prod_id.1, family_id.0, family_id.1) - }, - false => (0, 0, 0, 0, 0) + } + false => (0, 0, 0, 0, 0), } } @@ -407,6 +427,8 @@ struct OcclumResourceLimits { kernel_space_heap_size: String, kernel_space_stack_size: String, user_space_size: String, + #[cfg(feature = "ms_buffer")] + marshal_buffer_size: Option, } #[derive(Debug, PartialEq, Clone, Deserialize, Serialize)] @@ -419,7 +441,7 @@ struct OcclumProcess { #[derive(Debug, PartialEq, Deserialize)] struct OcclumMetaID { high: String, - low: String + low: String, } #[derive(Debug, PartialEq, Deserialize)] @@ -429,7 +451,7 @@ struct OcclumMetadata { debuggable: bool, enable_kss: bool, family_id: OcclumMetaID, - ext_prod_id: OcclumMetaID + ext_prod_id: OcclumMetaID, } #[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] @@ -483,6 +505,8 @@ struct EnclaveConfiguration { ReservedMemMinSize: u64, ReservedMemInitSize: u64, ReservedMemExecutable: u32, + #[cfg(feature = "ms_buffer")] + MarshalBufferSize: u64, EnableKSS: u32, ISVEXTPRODID_H: u64, ISVEXTPRODID_L: u64,