diff --git a/src/libos/src/net/socket/sockopt/get.rs b/src/libos/src/net/socket/sockopt/get.rs index 8dbd4ed3..420c0538 100644 --- a/src/libos/src/net/socket/sockopt/get.rs +++ b/src/libos/src/net/socket/sockopt/get.rs @@ -35,7 +35,8 @@ impl GetSockOptRawCmd { } pub fn output(&self) -> Option<&[u8]> { - self.optlen.map(|_| self.optval.as_ref()) + self.optlen + .map(|opt_len| &self.optval[..(opt_len as usize)]) } } diff --git a/src/libos/src/net/socket/sockopt/set.rs b/src/libos/src/net/socket/sockopt/set.rs index e63ea96e..8118885f 100644 --- a/src/libos/src/net/socket/sockopt/set.rs +++ b/src/libos/src/net/socket/sockopt/set.rs @@ -5,12 +5,11 @@ use libc::ocall::setsockopt as do_setsockopt; pub struct SetSockOptRawCmd { level: i32, optname: i32, - optval: Box<[u8]>, + optval: &'static [u8], } impl SetSockOptRawCmd { - pub fn new(level: i32, optname: i32, optval: &[u8]) -> Self { - let optval = Box::from(optval); + pub fn new(level: i32, optname: i32, optval: &'static [u8]) -> Self { Self { level, optname, diff --git a/src/libos/src/net/syscalls.rs b/src/libos/src/net/syscalls.rs index c8c72ee7..1a91158f 100644 --- a/src/libos/src/net/syscalls.rs +++ b/src/libos/src/net/syscalls.rs @@ -274,10 +274,6 @@ pub fn do_setsockopt( ); let file_ref = current!().file(fd as FileDesc)?; - if optval as usize != 0 && optlen == 0 && ENABLE_URING.load(Ordering::Relaxed) { - return_errno!(EINVAL, "the optlen size is 0"); - } - let optval = from_user::make_slice(optval as *const u8, optlen as usize)?; if let Ok(host_socket) = file_ref.as_host_socket() { @@ -1132,7 +1128,11 @@ fn new_uring_getsockopt_cmd( } /// Create a new ioctl command for host socket setsockopt syscall -fn new_host_setsockopt_cmd(level: i32, optname: i32, optval: &[u8]) -> Result> { +fn new_host_setsockopt_cmd( + level: i32, + optname: i32, + optval: &'static [u8], +) -> Result> { if level != libc::SOL_SOCKET { return Ok(Box::new(SetSockOptRawCmd::new(level, optname, optval))); } @@ -1162,7 +1162,7 @@ fn new_host_setsockopt_cmd(level: i32, optname: i32, optval: &[u8]) -> Result Result> { if level != libc::SOL_SOCKET {