diff --git a/Cargo.lock b/Cargo.lock index dcac3e5..b6ca4dc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -41,7 +41,7 @@ dependencies = [ "byteorder", "bytesize", "enum_primitive", - "itertools", + "itertools 0.13.0", "log", "memfd", "memmap2", @@ -67,7 +67,7 @@ dependencies = [ "clone3", "humantime", "humantime-serde", - "itertools", + "itertools 0.13.0", "libc", "log", "memfd", @@ -107,7 +107,7 @@ dependencies = [ "convert_case", "darling", "humantime", - "itertools", + "itertools 0.12.1", "proc-macro2", "quote", "static_assertions", @@ -266,6 +266,12 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + [[package]] name = "chrono" version = "0.4.38" @@ -691,6 +697,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.11" @@ -797,12 +812,13 @@ dependencies = [ [[package]] name = "nix" -version = "0.27.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2eb04e9c688eff1c89d72b407f168cf79bb9e867a9d3323ed6c01519eb9cc053" +checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" dependencies = [ "bitflags 2.5.0", "cfg-if", + "cfg_aliases", "libc", "memoffset", ] diff --git a/Cargo.toml b/Cargo.toml index a375e73..8dc1fce 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,10 +24,10 @@ members = [ [workspace.dependencies] a653rs = "0.5" log = "0" -nix = { version = "0.27", features = ["socket", "process", "fs", "uio", "signal", "user", "mount", "event", "sched"] } +nix = { version = "0.29", features = ["socket", "process", "fs", "uio", "signal", "user", "mount", "event", "sched"] } memmap2 = "0.9" procfs = "0.16" polling = "3.4" -itertools = "0.12.1" +itertools = "0.13" once_cell = "1.19" bytesize = "1.1" diff --git a/core/src/ipc.rs b/core/src/ipc.rs index f4cd77e..db4fbc5 100644 --- a/core/src/ipc.rs +++ b/core/src/ipc.rs @@ -234,7 +234,9 @@ where let io_fd = self.socket.as_raw_fd(); match recvmsg::<()>(io_fd, &mut iov, Some(&mut cmsg), MsgFlags::MSG_DONTWAIT) { Ok(msg) => { - if let Some(ControlMessageOwned::ScmRights(fds)) = msg.cmsgs().next() { + if let Some(ControlMessageOwned::ScmRights(fds)) = + msg.cmsgs().typ(SystemError::Panic)?.next() + { if let &[raw_fd] = fds.as_slice() { let sock = unsafe { T::from_raw_fd(raw_fd) }; return Ok(Some(sock)); diff --git a/hypervisor/src/hypervisor/syscall.rs b/hypervisor/src/hypervisor/syscall.rs index 31be990..2d73a84 100644 --- a/hypervisor/src/hypervisor/syscall.rs +++ b/hypervisor/src/hypervisor/syscall.rs @@ -22,7 +22,7 @@ fn recv_fd_triple(fd: BorrowedFd) -> Result<[OwnedFd; 3]> { let mut iov = [IoSliceMut::new(&mut iobuf)]; let res = recvmsg::<()>(fd.as_raw_fd(), &mut iov, Some(&mut cmsg), MsgFlags::empty())?; - let fds: Vec = match res.cmsgs().next().unwrap() { + let fds: Vec = match res.cmsgs()?.next().unwrap() { ControlMessageOwned::ScmRights(fds) => fds, _ => bail!("received an unknown cmsg"), }; @@ -97,7 +97,7 @@ pub fn handle(fd: BorrowedFd, timeout: Option) -> Result { // Trigger the event let buf = 1_u64.to_ne_bytes(); - unistd::write(event_fd.as_raw_fd(), &buf)?; + unistd::write(event_fd, &buf)?; nsyscalls += 1; } @@ -110,7 +110,7 @@ mod tests { use std::io::IoSlice; use std::os::fd::{AsFd, AsRawFd}; - use nix::sys::eventfd::{eventfd, EfdFlags}; + use nix::sys::eventfd::EventFd; use nix::sys::socket::{ sendmsg, socketpair, AddressFamily, ControlMessage, SockFlag, SockType, }; @@ -132,7 +132,7 @@ mod tests { let request_thread = std::thread::spawn(move || { let mut request_fd = Mfd::create("requ").unwrap(); let mut response_fd = Mfd::create("resp").unwrap(); - let event_fd = eventfd(0, EfdFlags::empty()).unwrap(); + let event_fd = EventFd::new().unwrap(); // Initialize the request fd request_fd diff --git a/partition/src/syscall.rs b/partition/src/syscall.rs index 228ae31..c69d6c2 100644 --- a/partition/src/syscall.rs +++ b/partition/src/syscall.rs @@ -8,7 +8,7 @@ use std::os::fd::{AsFd, AsRawFd, BorrowedFd}; use anyhow::Result; use nix::libc::EINTR; -use nix::sys::eventfd::{self, EfdFlags}; +use nix::sys::eventfd::EventFd; use nix::sys::socket::{sendmsg, ControlMessage, MsgFlags}; use polling::{Event, Events, Poller}; @@ -57,7 +57,7 @@ fn execute_fd(fd: BorrowedFd, request: SyscallRequest) -> Result = match res.cmsgs().next().unwrap() { + let fds: Vec = match res.cmsgs().unwrap().next().unwrap() { ControlMessageOwned::ScmRights(fds) => fds .into_iter() .map(|fd| unsafe { OwnedFd::from_raw_fd(fd) }) @@ -161,7 +161,7 @@ mod tests { // Trigger the eventfd let buf = 1_u64.to_ne_bytes(); - unistd::write(event_fd.as_raw_fd(), &buf).unwrap(); + unistd::write(event_fd, &buf).unwrap(); }); request_thread.join().unwrap();