diff --git a/enclave-runner/src/library.rs b/enclave-runner/src/library.rs index 5e9839b84..f80ff9437 100644 --- a/enclave-runner/src/library.rs +++ b/enclave-runner/src/library.rs @@ -49,9 +49,8 @@ impl Library { usercall_ext: Option>, forward_panics: bool, ) -> Library { - let enclave = EnclaveState::library(tcss, usercall_ext, forward_panics); Library { - enclave, + enclave: EnclaveState::library(tcss, usercall_ext, forward_panics), address, size, } diff --git a/enclave-runner/src/usercalls/mod.rs b/enclave-runner/src/usercalls/mod.rs index 01f149f23..279ad0012 100644 --- a/enclave-runner/src/usercalls/mod.rs +++ b/enclave-runner/src/usercalls/mod.rs @@ -13,7 +13,6 @@ use std::alloc::{GlobalAlloc, Layout, System}; use std::cell::RefCell; use std::collections::VecDeque; use std::io::{self, ErrorKind as IoErrorKind, Read, Result as IoResult}; -use std::net::ToSocketAddrs; use std::result::Result as StdResult; use std::str; use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering}; @@ -180,7 +179,7 @@ pub trait AsyncStream: AsyncRead + AsyncWrite + 'static + Send + Sync { impl AsyncStream for S {} /// AsyncListener lets an implementation implement a slightly modified form of `std::net::TcpListener::accept`. -pub trait AsyncListener: Send { +pub trait AsyncListener: 'static + Send { /// The enclave may optionally request the local or peer addresses /// be returned in `local_addr` or `peer_addr`, respectively. /// If `local_addr` and/or `peer_addr` are not `None`, they will point to an empty `String`. @@ -1156,7 +1155,7 @@ impl<'tcs> IOHandlerInput<'tcs> { if let Some(stream_ext) = self .enclave .usercall_ext - .bind_stream(&addr, local_addr_str.as_mut())? + .bind_stream(addr, local_addr_str.as_mut())? { if let Some(local_addr) = local_addr { local_addr.set(local_addr_str.unwrap().into_bytes()); @@ -1164,8 +1163,7 @@ impl<'tcs> IOHandlerInput<'tcs> { return Ok(self.alloc_fd(AsyncFileDesc::listener(stream_ext)).await); } - // !!! see if there's a better way - let socket = tokio::net::TcpListener::bind(&addr.to_socket_addrs()?.as_mut_slice()[0]).await?; + let socket = tokio::net::TcpListener::bind(addr).await?; if let Some(local_addr) = local_addr { local_addr.set(socket.local_addr()?.to_string().into_bytes()); } @@ -1205,7 +1203,7 @@ impl<'tcs> IOHandlerInput<'tcs> { let mut local_addr_str = local_addr.as_ref().map(|_| String::new()); let mut peer_addr_str = peer_addr.as_ref().map(|_| String::new()); if let Some(stream_ext) = self.enclave.usercall_ext.connect_stream( - &addr, + addr, local_addr_str.as_mut(), peer_addr_str.as_mut(), ).await? { @@ -1218,18 +1216,7 @@ impl<'tcs> IOHandlerInput<'tcs> { return Ok(self.alloc_fd(AsyncFileDesc::stream(stream_ext)).await); } - // try to connect to all socket addresses one by one - let mut stream = None; - for socket_addr in addr.to_socket_addrs()? { - stream = Some(tokio::net::TcpStream::connect(&socket_addr).await); - if stream.as_ref().unwrap().is_ok() { - break; - } - } - let stream = match stream { - None => return Err(IoErrorKind::InvalidInput.into()), - Some(s) => s? - }; + let stream = tokio::net::TcpStream::connect(addr).await?; if let Some(local_addr) = local_addr { match stream.local_addr() { diff --git a/sgxs-tools/src/sgx_detect/tests/mod.rs b/sgxs-tools/src/sgx_detect/tests/mod.rs index d4779496f..18356f64d 100644 --- a/sgxs-tools/src/sgx_detect/tests/mod.rs +++ b/sgxs-tools/src/sgx_detect/tests/mod.rs @@ -746,7 +746,7 @@ impl RunEnclaveProdWl { let mut builder = EnclaveBuilder::new_from_memory(enclave); builder.attributes(sig.attributes).sigstruct(sig); - let mut lib = builder.build_library(enclave_loader)?; + let lib = builder.build_library(enclave_loader)?; unsafe { match lib.call(!0, 0, 0, 0, 0) {