This is an automated email from the ASF dual-hosted git repository. yuanz pushed a commit to branch no-std in repository https://gitbox.apache.org/repos/asf/incubator-teaclave-trustzone-sdk.git
commit 9cf82bef3aebe466836c41b984359b8d014e425e Author: Sumit Garg <[email protected]> AuthorDate: Thu Nov 23 18:46:40 2023 +0530 optee-utee-sys: Add optional no_std feature support Default feature remains std support, no_std can be enabled optionally. Signed-off-by: Sumit Garg <[email protected]> --- optee-utee/optee-utee-sys/Cargo.toml | 5 +- optee-utee/optee-utee-sys/src/lib.rs | 2 + optee-utee/optee-utee-sys/src/tee_api.rs | 8 ++- optee-utee/optee-utee-sys/src/tee_api_defines.rs | 2 +- optee-utee/optee-utee-sys/src/tee_api_types.rs | 9 ++- .../src/tee_internal_api_extensions.rs | 5 +- optee-utee/optee-utee-sys/src/tee_isocket.rs | 5 +- optee-utee/optee-utee-sys/src/tee_tcpsocket.rs | 5 +- optee-utee/optee-utee-sys/src/tee_udpsocket.rs | 5 +- optee-utee/optee-utee-sys/src/trace.rs | 5 +- optee-utee/optee-utee-sys/src/user_ta_header.rs | 27 +++++---- optee-utee/optee-utee-sys/src/utee_syscalls.rs | 65 +++++++++++----------- 12 files changed, 87 insertions(+), 56 deletions(-) diff --git a/optee-utee/optee-utee-sys/Cargo.toml b/optee-utee/optee-utee-sys/Cargo.toml index 2e6bdcb..92fa456 100644 --- a/optee-utee/optee-utee-sys/Cargo.toml +++ b/optee-utee/optee-utee-sys/Cargo.toml @@ -25,5 +25,6 @@ description = "Native bindings to the libutee library." edition = "2018" links = "utee" -[dependencies] -libc = { path = "../../rust/libc", version = "=0.2.99" } +[features] +default = ["std"] +std = [] diff --git a/optee-utee/optee-utee-sys/src/lib.rs b/optee-utee/optee-utee-sys/src/lib.rs index 3284a5e..df98e94 100644 --- a/optee-utee/optee-utee-sys/src/lib.rs +++ b/optee-utee/optee-utee-sys/src/lib.rs @@ -15,6 +15,8 @@ // specific language governing permissions and limitations // under the License. +#![cfg_attr(not(feature = "std"), no_std)] +#![feature(c_size_t)] #![allow(non_camel_case_types, non_snake_case)] pub use tee_api::*; diff --git a/optee-utee/optee-utee-sys/src/tee_api.rs b/optee-utee/optee-utee-sys/src/tee_api.rs index 2ef3e34..9db86eb 100644 --- a/optee-utee/optee-utee-sys/src/tee_api.rs +++ b/optee-utee/optee-utee-sys/src/tee_api.rs @@ -16,7 +16,11 @@ // under the License. use super::*; -use libc::*; + +#[cfg(feature = "std")] +use std::os::raw::*; +#[cfg(not(feature = "std"))] +use core::ffi::*; extern "C" { // Property access functions @@ -483,7 +487,7 @@ extern "C" { pub fn TEE_BigIntShiftRight( dest: *mut TEE_BigInt, op: *const TEE_BigInt, - bits: size_t, + bits: c_size_t, ) -> c_void; pub fn TEE_BigIntGetBit(src: *const TEE_BigInt, bitIndex: u32) -> bool; pub fn TEE_BigIntGetBitCount(src: *const TEE_BigInt) -> u32; diff --git a/optee-utee/optee-utee-sys/src/tee_api_defines.rs b/optee-utee/optee-utee-sys/src/tee_api_defines.rs index 3de3e12..2ad36bf 100644 --- a/optee-utee/optee-utee-sys/src/tee_api_defines.rs +++ b/optee-utee/optee-utee-sys/src/tee_api_defines.rs @@ -16,7 +16,7 @@ // under the License. use super::tee_api_types::*; -use std::ptr::null; +use core::ptr::null; pub const TEE_CORE_API_MAJOR_VERSION: u32 = 0x00000001; pub const TEE_CORE_API_MINOR_VERSION: u32 = 0x00000003; diff --git a/optee-utee/optee-utee-sys/src/tee_api_types.rs b/optee-utee/optee-utee-sys/src/tee_api_types.rs index 140cdbf..755a173 100644 --- a/optee-utee/optee-utee-sys/src/tee_api_types.rs +++ b/optee-utee/optee-utee-sys/src/tee_api_types.rs @@ -15,10 +15,13 @@ // specific language governing permissions and limitations // under the License. -use libc::*; - // Common Definitions +#[cfg(feature = "std")] +use std::os::raw::*; +#[cfg(not(feature = "std"))] +use core::ffi::*; + pub type TEE_Result = u32; #[repr(C)] @@ -216,7 +219,7 @@ pub struct TEE_SEReaderProperties { #[repr(C)] pub struct TEE_SEAID { pub buffer: *mut u8, - pub bufferLen: size_t, + pub bufferLen: c_size_t, } // Other definitions diff --git a/optee-utee/optee-utee-sys/src/tee_internal_api_extensions.rs b/optee-utee/optee-utee-sys/src/tee_internal_api_extensions.rs index e940143..017160d 100644 --- a/optee-utee/optee-utee-sys/src/tee_internal_api_extensions.rs +++ b/optee-utee/optee-utee-sys/src/tee_internal_api_extensions.rs @@ -15,8 +15,11 @@ // specific language governing permissions and limitations // under the License. +#[cfg(feature = "std")] +use std::os::raw::*; +#[cfg(not(feature = "std"))] +use core::ffi::*; use super::*; -use libc::*; extern "C" { /// tee_invoke_supp_plugin() - invoke a tee-supplicant's plugin diff --git a/optee-utee/optee-utee-sys/src/tee_isocket.rs b/optee-utee/optee-utee-sys/src/tee_isocket.rs index 4906711..672416e 100644 --- a/optee-utee/optee-utee-sys/src/tee_isocket.rs +++ b/optee-utee/optee-utee-sys/src/tee_isocket.rs @@ -15,8 +15,11 @@ // specific language governing permissions and limitations // under the License. +#[cfg(feature = "std")] +use std::os::raw::*; +#[cfg(not(feature = "std"))] +use core::ffi::*; use super::*; -use libc::*; pub type TEE_iSocketHandle = *mut c_void; pub type TEE_iSocket = TEE_iSocket_s; diff --git a/optee-utee/optee-utee-sys/src/tee_tcpsocket.rs b/optee-utee/optee-utee-sys/src/tee_tcpsocket.rs index a010ef0..583f3d3 100644 --- a/optee-utee/optee-utee-sys/src/tee_tcpsocket.rs +++ b/optee-utee/optee-utee-sys/src/tee_tcpsocket.rs @@ -15,8 +15,11 @@ // specific language governing permissions and limitations // under the License. +#[cfg(feature = "std")] +use std::os::raw::*; +#[cfg(not(feature = "std"))] +use core::ffi::*; use super::*; -use libc::*; pub type TEE_tcpSocket_Setup = TEE_tcpSocket_Setup_s; #[repr(C)] diff --git a/optee-utee/optee-utee-sys/src/tee_udpsocket.rs b/optee-utee/optee-utee-sys/src/tee_udpsocket.rs index 3bb13ce..1a6591f 100644 --- a/optee-utee/optee-utee-sys/src/tee_udpsocket.rs +++ b/optee-utee/optee-utee-sys/src/tee_udpsocket.rs @@ -15,8 +15,11 @@ // specific language governing permissions and limitations // under the License. +#[cfg(feature = "std")] +use std::os::raw::*; +#[cfg(not(feature = "std"))] +use core::ffi::*; use super::*; -use libc::*; pub type TEE_udpSocket_Setup = TEE_udpSocket_Setup_s; #[repr(C)] diff --git a/optee-utee/optee-utee-sys/src/trace.rs b/optee-utee/optee-utee-sys/src/trace.rs index d632db9..5293ff8 100644 --- a/optee-utee/optee-utee-sys/src/trace.rs +++ b/optee-utee/optee-utee-sys/src/trace.rs @@ -15,7 +15,10 @@ // specific language governing permissions and limitations // under the License. -use libc::*; +#[cfg(feature = "std")] +use std::os::raw::*; +#[cfg(not(feature = "std"))] +use core::ffi::*; extern "C" { pub fn trace_ext_puts(str: *const c_char); diff --git a/optee-utee/optee-utee-sys/src/user_ta_header.rs b/optee-utee/optee-utee-sys/src/user_ta_header.rs index f25e8f3..9868f06 100644 --- a/optee-utee/optee-utee-sys/src/user_ta_header.rs +++ b/optee-utee/optee-utee-sys/src/user_ta_header.rs @@ -15,10 +15,13 @@ // specific language governing permissions and limitations // under the License. +#[cfg(feature = "std")] +use std::os::raw::*; +#[cfg(not(feature = "std"))] +use core::ffi::*; use super::tee_api_types::*; use super::utee_syscalls::*; use super::utee_types::*; -use libc::*; pub const TA_FLAG_SINGLE_INSTANCE: u32 = 1 << 2; pub const TA_FLAG_MULTI_SESSION: u32 = 1 << 3; @@ -50,16 +53,16 @@ pub fn __ta_entry(func: c_ulong, session_id: c_ulong, up: *mut utee_params, cmd_ unsafe impl Sync for ta_head {} -pub const TA_PROP_STR_SINGLE_INSTANCE: *const c_char = "gpd.ta.singleInstance\0".as_ptr(); -pub const TA_PROP_STR_MULTI_SESSION: *const c_char = "gpd.ta.multiSession\0".as_ptr(); -pub const TA_PROP_STR_KEEP_ALIVE: *const c_char = "gpd.ta.instanceKeepAlive\0".as_ptr(); -pub const TA_PROP_STR_DATA_SIZE: *const c_char = "gpd.ta.dataSize\0".as_ptr(); -pub const TA_PROP_STR_STACK_SIZE: *const c_char = "gpd.ta.stackSize\0".as_ptr(); -pub const TA_PROP_STR_VERSION: *const c_char = "gpd.ta.version\0".as_ptr(); -pub const TA_PROP_STR_DESCRIPTION: *const c_char = "gpd.ta.description\0".as_ptr(); -pub const TA_PROP_STR_UNSAFE_PARAM: *const c_char = "op-tee.unsafe_param\0".as_ptr(); -pub const TA_PROP_STR_REMAP: *const c_char = "op-tee.remap\0".as_ptr(); -pub const TA_PROP_STR_CACHE_SYNC: *const c_char = "op-tee.cache_sync\0".as_ptr(); +pub const TA_PROP_STR_SINGLE_INSTANCE: *const c_uchar = "gpd.ta.singleInstance\0".as_ptr(); +pub const TA_PROP_STR_MULTI_SESSION: *const c_uchar = "gpd.ta.multiSession\0".as_ptr(); +pub const TA_PROP_STR_KEEP_ALIVE: *const c_uchar = "gpd.ta.instanceKeepAlive\0".as_ptr(); +pub const TA_PROP_STR_DATA_SIZE: *const c_uchar = "gpd.ta.dataSize\0".as_ptr(); +pub const TA_PROP_STR_STACK_SIZE: *const c_uchar = "gpd.ta.stackSize\0".as_ptr(); +pub const TA_PROP_STR_VERSION: *const c_uchar = "gpd.ta.version\0".as_ptr(); +pub const TA_PROP_STR_DESCRIPTION: *const c_uchar = "gpd.ta.description\0".as_ptr(); +pub const TA_PROP_STR_UNSAFE_PARAM: *const c_uchar = "op-tee.unsafe_param\0".as_ptr(); +pub const TA_PROP_STR_REMAP: *const c_uchar = "op-tee.remap\0".as_ptr(); +pub const TA_PROP_STR_CACHE_SYNC: *const c_uchar = "op-tee.cache_sync\0".as_ptr(); #[repr(C)] pub enum user_ta_prop_type { @@ -73,7 +76,7 @@ pub enum user_ta_prop_type { #[repr(C)] pub struct user_ta_property { - pub name: *const c_char, + pub name: *const c_uchar, pub prop_type: user_ta_prop_type, pub value: *mut c_void, } diff --git a/optee-utee/optee-utee-sys/src/utee_syscalls.rs b/optee-utee/optee-utee-sys/src/utee_syscalls.rs index b375c1f..5891c30 100644 --- a/optee-utee/optee-utee-sys/src/utee_syscalls.rs +++ b/optee-utee/optee-utee-sys/src/utee_syscalls.rs @@ -16,11 +16,14 @@ // under the License. use super::*; -use libc::*; +#[cfg(feature = "std")] +use std::os::raw::*; +#[cfg(not(feature = "std"))] +use core::ffi::*; extern "C" { pub fn _utee_return(ret: c_ulong) -> !; - pub fn _utee_log(buf: *const c_void, len: size_t); + pub fn _utee_log(buf: *const c_void, len: c_size_t); pub fn _utee_panic(code: c_ulong); pub fn _utee_get_property( prop_set: c_ulong, @@ -52,7 +55,7 @@ extern "C" { params: *mut utee_params, ret_orig: *mut u32, ) -> TEE_Result; - pub fn _utee_check_access_rights(flags: u32, buf: *const c_void, len: size_t) + pub fn _utee_check_access_rights(flags: u32, buf: *const c_void, len: c_size_t) -> TEE_Result; pub fn _utee_get_cancellation_flag(cancel: *mut u32) -> TEE_Result; pub fn _utee_unmask_cancellation(old_mask: *mut u32) -> TEE_Result; @@ -69,28 +72,28 @@ extern "C" { ) -> TEE_Result; pub fn _utee_cryp_state_copy(dst: c_ulong, src: c_ulong) -> TEE_Result; pub fn _utee_cryp_state_free(state: c_ulong) -> TEE_Result; - pub fn _utee_hash_init(state: c_ulong, iv: *const c_void, iv_len: size_t) -> TEE_Result; - pub fn _utee_hash_update(state: c_ulong, chunk: *const c_void, chunk_size: size_t) + pub fn _utee_hash_init(state: c_ulong, iv: *const c_void, iv_len: c_size_t) -> TEE_Result; + pub fn _utee_hash_update(state: c_ulong, chunk: *const c_void, chunk_size: c_size_t) -> TEE_Result; pub fn _utee_hash_final( state: c_ulong, chunk: *const c_void, - chunk_size: size_t, + chunk_size: c_size_t, hash: *mut c_void, hash_len: *mut u64, ) -> TEE_Result; - pub fn _utee_cipher_init(state: c_ulong, iv: *const c_void, iv_len: size_t) -> TEE_Result; + pub fn _utee_cipher_init(state: c_ulong, iv: *const c_void, iv_len: c_size_t) -> TEE_Result; pub fn _utee_cipher_update( state: c_ulong, src: *const c_void, - src_len: size_t, + src_len: c_size_t, dest: *mut c_void, dest_len: *mut u64, ) -> TEE_Result; pub fn _utee_cipher_final( state: c_ulong, src: *const c_void, - src_len: size_t, + src_len: c_size_t, dest: *mut c_void, dest_len: *mut u64, ) -> TEE_Result; @@ -124,31 +127,31 @@ extern "C" { param_count: c_ulong, derived_key: c_ulong, ) -> TEE_Result; - pub fn _utee_cryp_random_number_generate(buf: *mut c_void, blen: size_t) -> TEE_Result; + pub fn _utee_cryp_random_number_generate(buf: *mut c_void, blen: c_size_t) -> TEE_Result; pub fn _utee_authenc_init( state: c_ulong, nonce: *const c_void, - nonce_len: size_t, - tag_len: size_t, - aad_len: size_t, - payload_len: size_t, + nonce_len: c_size_t, + tag_len: c_size_t, + aad_len: c_size_t, + payload_len: c_size_t, ) -> TEE_Result; pub fn _utee_authenc_update_aad( state: c_ulong, aad_data: *const c_void, - aad_data_len: size_t, + aad_data_len: c_size_t, ) -> TEE_Result; pub fn _utee_authenc_update_payload( state: c_ulong, src_data: *const c_void, - src_len: size_t, + src_len: c_size_t, dest_data: *mut c_void, dest_len: *mut u64, ) -> TEE_Result; pub fn _utee_authenc_enc_final( state: c_ulong, src_data: *const c_void, - src_len: size_t, + src_len: c_size_t, dest_data: *mut c_void, dest_len: *mut u64, tag: *mut c_void, @@ -157,18 +160,18 @@ extern "C" { pub fn _utee_authenc_dec_final( state: c_ulong, src_data: *const c_void, - src_len: size_t, + src_len: c_size_t, dest_data: *mut c_void, dest_len: *mut u64, tag: *const c_void, - tag_len: size_t, + tag_len: c_size_t, ) -> TEE_Result; pub fn _utee_asymm_operate( state: c_ulong, params: *const utee_attribute, num_params: c_ulong, src_data: *const c_void, - src_len: size_t, + src_len: c_size_t, dest_data: *mut c_void, dest_len: *mut u64, ) -> TEE_Result; @@ -177,32 +180,32 @@ extern "C" { params: *const utee_attribute, num_params: c_ulong, data: *const c_void, - data_len: size_t, + data_len: c_size_t, sig: *const c_void, - sig_len: size_t, + sig_len: c_size_t, ) -> TEE_Result; pub fn _utee_storage_obj_open( storage_id: c_ulong, object_id: *const c_void, - object_id_len: size_t, + object_id_len: c_size_t, flags: c_ulong, obj: *mut u32, ) -> TEE_Result; pub fn _utee_storage_obj_create( storage_id: c_ulong, object_id: *const c_void, - object_id_len: size_t, + object_id_len: c_size_t, flags: c_ulong, attr: c_ulong, data: *const c_void, - len: size_t, + len: c_size_t, obj: *mut u32, ) -> TEE_Result; pub fn _utee_storage_obj_del(obj: c_ulong) -> TEE_Result; pub fn _utee_storage_obj_rename( obj: c_ulong, new_obj_id: *const c_void, - new_obj_id_len: size_t, + new_obj_id_len: c_size_t, ) -> TEE_Result; pub fn _utee_storage_alloc_enum(obj_enum: *mut u32) -> TEE_Result; pub fn _utee_storage_free_enum(obj_enum: c_ulong) -> TEE_Result; @@ -217,13 +220,13 @@ extern "C" { pub fn _utee_storage_obj_read( obj: c_ulong, data: *mut c_void, - len: size_t, + len: c_size_t, count: *mut u64, ) -> TEE_Result; - pub fn _utee_storage_obj_write(obj: c_ulong, data: *const c_void, len: size_t) -> TEE_Result; - pub fn _utee_storage_obj_trunc(obj: c_ulong, len: size_t) -> TEE_Result; + pub fn _utee_storage_obj_write(obj: c_ulong, data: *const c_void, len: c_size_t) -> TEE_Result; + pub fn _utee_storage_obj_trunc(obj: c_ulong, len: c_size_t) -> TEE_Result; pub fn _utee_storage_obj_seek(obj: c_ulong, offset: i32, whence: c_ulong) -> TEE_Result; - pub fn _utee_cache_operation(va: *mut c_void, l: size_t, op: c_ulong) -> TEE_Result; + pub fn _utee_cache_operation(va: *mut c_void, l: c_size_t, op: c_ulong) -> TEE_Result; // unimplemented syscall -// pub fn utee_gprof_send(buf: *mut c_void, size: size_t, id: *mut u32) -> TEE_Result; +// pub fn utee_gprof_send(buf: *mut c_void, size: c_size_t, id: *mut u32) -> TEE_Result; } --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
