Add dcap musl-libc demo case
This commit is contained in:
		
							parent
							
								
									75a66a3537
								
							
						
					
					
						commit
						6cba1c02a1
					
				| @ -23,6 +23,11 @@ You can run the DCAP quote generation and verification demo, including dcap libr | ||||
| ./run_dcap_quote_on_occlum.sh | ||||
| ``` | ||||
| 
 | ||||
| Or if musl-libc version is expected, run | ||||
| ``` | ||||
| ./run_dcap_quote_on_occlum.sh musl | ||||
| ``` | ||||
| 
 | ||||
| ## Preinstalled DCAP package in Ubuntu 18.04 and CentOS 8.1 | ||||
| The DCAP package has been preinstalled in the Occlum official docker images | ||||
| including Ubuntu 18.04 and CentOS 8.1 since Occlum 0.19.0. The versions of DCAP | ||||
|  | ||||
| @ -1,12 +1,13 @@ | ||||
| CC := gcc | ||||
| LIBPATH := ../dcap_lib/target/debug | ||||
| CC ?= gcc | ||||
| LD ?= ld | ||||
| LIBPATH ?= ../dcap_lib/target/debug | ||||
| 
 | ||||
| .PHONY: all clean | ||||
| 
 | ||||
| all: dcap_c_test | ||||
| 
 | ||||
| dcap_c_test: dcap_c_test.c | ||||
| 		$(CC) $^ -fPIE -pie -o $@ -L $(LIBPATH) -ldcap_quote | ||||
| 		$(CC) $^ -fPIE -pie -o $@ -L $(LIBPATH) -ldcap_quote -I /opt/intel/sgxsdk/include | ||||
| 
 | ||||
| clean: | ||||
| 		rm -rf dcap_c_test | ||||
|  | ||||
| @ -6,7 +6,6 @@ | ||||
| #include "sgx_urts.h" | ||||
| #include "sgx_report.h" | ||||
| #include "sgx_qve_header.h" | ||||
| #include "sgx_dcap_ql_wrapper.h" | ||||
| #include "sgx_pce.h" | ||||
| #include "sgx_error.h" | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										16
									
								
								demos/remote_attestation/dcap/dcap-musl.yaml
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										16
									
								
								demos/remote_attestation/dcap/dcap-musl.yaml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | ||||
| includes: | ||||
|   - base.yaml | ||||
| # dcap | ||||
| targets: | ||||
|   # copy bins | ||||
|   - target: /bin | ||||
|     copy: | ||||
|       - files: | ||||
|         - ../dcap_lib/target/x86_64-unknown-linux-musl/release/examples/dcap_test | ||||
|         - ../c_app/dcap_c_test | ||||
|   # copy lib | ||||
|   - target: /lib | ||||
|     copy: | ||||
|       - files: | ||||
|         - ../dcap_lib/target/x86_64-unknown-linux-musl/release/libdcap_quote.so | ||||
| 
 | ||||
| @ -6,11 +6,11 @@ targets: | ||||
|   - target: /bin | ||||
|     copy: | ||||
|       - files: | ||||
|         - ../dcap_lib/target/debug/examples/dcap_test | ||||
|         - ../dcap_lib/target/release/examples/dcap_test | ||||
|         - ../c_app/dcap_c_test | ||||
|   # copy lib | ||||
|   - target: /opt/occlum/glibc/lib | ||||
|     copy: | ||||
|       - files: | ||||
|         - ../dcap_lib/target/debug/libdcap_quote.so | ||||
|         - ../dcap_lib/target/release/libdcap_quote.so | ||||
| 
 | ||||
|  | ||||
| @ -9,6 +9,7 @@ edition = "2018" | ||||
| [dependencies] | ||||
| sgx_types = { path = "../../../../deps/rust-sgx-sdk/sgx_types" } | ||||
| libc = "0.2" | ||||
| cfg-if = "1.0.0" | ||||
| 
 | ||||
| [lib] | ||||
| crate-type = ["cdylib", "rlib", "staticlib"] | ||||
|  | ||||
| @ -5,10 +5,24 @@ use sgx_types::{ | ||||
|     sgx_report_data_t, sgx_ql_qv_result_t | ||||
| }; | ||||
| 
 | ||||
| const SGXIOC_GET_DCAP_QUOTE_SIZE: c_ulong = 0x80047307; | ||||
| const SGXIOC_GEN_DCAP_QUOTE: c_ulong = 0xc0187308; | ||||
| const SGXIOC_GET_DCAP_SUPPLEMENTAL_SIZE: c_ulong = 0x80047309; | ||||
| const SGXIOC_VER_DCAP_QUOTE: c_ulong = 0xc030730a; | ||||
| const SGXIOC_GET_DCAP_QUOTE_SIZE: u64 = 0x80047307; | ||||
| const SGXIOC_GEN_DCAP_QUOTE: u64 = 0xc0187308; | ||||
| const SGXIOC_GET_DCAP_SUPPLEMENTAL_SIZE: u64 = 0x80047309; | ||||
| const SGXIOC_VER_DCAP_QUOTE: u64 = 0xc030730a; | ||||
| 
 | ||||
| cfg_if::cfg_if! { | ||||
|     if #[cfg(target_env = "musl")] { | ||||
|         const IOCTL_GET_DCAP_QUOTE_SIZE: i32 = SGXIOC_GET_DCAP_QUOTE_SIZE as i32; | ||||
|         const IOCTL_GEN_DCAP_QUOTE: i32 = SGXIOC_GEN_DCAP_QUOTE as i32; | ||||
|         const IOCTL_GET_DCAP_SUPPLEMENTAL_SIZE: i32 = SGXIOC_GET_DCAP_SUPPLEMENTAL_SIZE as i32; | ||||
|         const IOCTL_VER_DCAP_QUOTE: i32 = SGXIOC_VER_DCAP_QUOTE as i32; | ||||
|     } else { | ||||
|         const IOCTL_GET_DCAP_QUOTE_SIZE: u64 = SGXIOC_GET_DCAP_QUOTE_SIZE; | ||||
|         const IOCTL_GEN_DCAP_QUOTE: u64 = SGXIOC_GEN_DCAP_QUOTE; | ||||
|         const IOCTL_GET_DCAP_SUPPLEMENTAL_SIZE: u64 = SGXIOC_GET_DCAP_SUPPLEMENTAL_SIZE; | ||||
|         const IOCTL_VER_DCAP_QUOTE: u64 = SGXIOC_VER_DCAP_QUOTE; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| // Copy from occlum/src/libos/src/fs/dev_fs/dev_sgx/mod.rs
 | ||||
| @ -59,9 +73,9 @@ impl DcapQuote { | ||||
|         println!("DcapQuote: get_quote_size"); | ||||
| 
 | ||||
|         let size: u32 = 0; | ||||
|         let ret = unsafe { libc::ioctl(self.fd, SGXIOC_GET_DCAP_QUOTE_SIZE, &size) }; | ||||
|         let ret = unsafe { libc::ioctl(self.fd, IOCTL_GET_DCAP_QUOTE_SIZE, &size) }; | ||||
|         if ret < 0 { | ||||
|             panic!("IOCTRL SGXIOC_GET_DCAP_QUOTE_SIZE failed"); | ||||
|             panic!("IOCTRL IOCTL_GET_DCAP_QUOTE_SIZE failed"); | ||||
|         } else { | ||||
|             self.quote_size = size; | ||||
|             size | ||||
| @ -77,9 +91,9 @@ impl DcapQuote { | ||||
|             quote_buf: quote_buf, | ||||
|         }; | ||||
| 
 | ||||
|         let ret = unsafe { libc::ioctl(self.fd, SGXIOC_GEN_DCAP_QUOTE, "e_arg) }; | ||||
|         let ret = unsafe { libc::ioctl(self.fd, IOCTL_GEN_DCAP_QUOTE, "e_arg) }; | ||||
|         if ret < 0 { | ||||
|             Err("IOCTRL SGXIOC_GEN_DCAP_QUOTE failed") | ||||
|             Err("IOCTRL IOCTL_GEN_DCAP_QUOTE failed") | ||||
|         } else { | ||||
|             Ok( 0 ) | ||||
|         } | ||||
| @ -89,9 +103,9 @@ impl DcapQuote { | ||||
|         println!("DcapQuote: get_supplemental_data_size"); | ||||
| 
 | ||||
|         let size: u32 = 0; | ||||
|         let ret = unsafe { libc::ioctl(self.fd, SGXIOC_GET_DCAP_SUPPLEMENTAL_SIZE, &size) }; | ||||
|         let ret = unsafe { libc::ioctl(self.fd, IOCTL_GET_DCAP_SUPPLEMENTAL_SIZE, &size) }; | ||||
|         if ret < 0 { | ||||
|             panic!("IOCTRL SGXIOC_GET_DCAP_SUPPLEMENTAL_SIZE failed"); | ||||
|             panic!("IOCTRL IOCTL_GET_DCAP_SUPPLEMENTAL_SIZE failed"); | ||||
|         } else { | ||||
|             self.supplemental_size = size; | ||||
|             size | ||||
| @ -101,10 +115,10 @@ impl DcapQuote { | ||||
|     pub fn verify_quote(&mut self, verify_arg: *mut IoctlVerDCAPQuoteArg) -> Result<i32, &'static str> { | ||||
|         println!("DcapQuote: verify_quote"); | ||||
| 
 | ||||
|         let ret = unsafe { libc::ioctl(self.fd, SGXIOC_VER_DCAP_QUOTE, verify_arg) }; | ||||
|         let ret = unsafe { libc::ioctl(self.fd, IOCTL_VER_DCAP_QUOTE, verify_arg) }; | ||||
|         if ret < 0 { | ||||
|             println!("ret = {}", ret); | ||||
|             Err("IOCTRL SGXIOC_VER_DCAP_QUOTE failed") | ||||
|             Err("IOCTRL IOCTL_VER_DCAP_QUOTE failed") | ||||
|         } else { | ||||
|             Ok( 0 ) | ||||
|         }        
 | ||||
|  | ||||
| @ -5,17 +5,34 @@ BLUE='\033[1;34m' | ||||
| NC='\033[0m' | ||||
| INSTANCE_DIR="occlum_instance" | ||||
| 
 | ||||
| if [[ $1 == "musl" ]]; then | ||||
|     echo "*** Build and run musl-libc dcap demo ***" | ||||
|     bomfile="../dcap-musl.yaml" | ||||
|     CC=occlum-gcc | ||||
|     LD=occlum-ld | ||||
|     CARGO=occlum-cargo | ||||
|     LIBPATH="../dcap_lib/target/x86_64-unknown-linux-musl/release" | ||||
| else | ||||
|     echo "*** Build and run glibc dcap demo ***" | ||||
|     bomfile="../dcap.yaml" | ||||
|     CC=gcc | ||||
|     LD=ld | ||||
|     CARGO=cargo | ||||
|     LIBPATH="../dcap_lib/target/release" | ||||
| fi | ||||
| 
 | ||||
| pushd dcap_lib | ||||
| cargo build --all-targets | ||||
| $CARGO build --all-targets --release | ||||
| popd | ||||
| 
 | ||||
| make -C c_app | ||||
| CC=$CC LD=$LD LIBPATH=$LIBPATH make -C c_app clean | ||||
| CC=$CC LD=$LD LIBPATH=$LIBPATH make -C c_app | ||||
| 
 | ||||
| rm -rf ${INSTANCE_DIR} && occlum new ${INSTANCE_DIR} | ||||
| cd ${INSTANCE_DIR} | ||||
| 
 | ||||
| rm -rf image | ||||
| copy_bom -f ../dcap.yaml --root image --include-dir /opt/occlum/etc/template | ||||
| copy_bom -f $bomfile --root image --include-dir /opt/occlum/etc/template | ||||
| 
 | ||||
| occlum build | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user