rutabaga_gfx: Uprev nix to 0.27.1

The new version of nix uses OwnedFd in various places, which allows us
to have less unsafe code.

TEST=CQ
BUG=b:293289578

Change-Id: I61aa80c4105eaf1182c5c325109b5aba11cf60de
Reviewed-on: https://chromium-review.googlesource.com/c/crosvm/crosvm/+/5072293
Auto-Submit: Andrew Walbran <qwandor@google.com>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Reviewed-by: Frederick Mayle <fmayle@google.com>
Commit-Queue: Frederick Mayle <fmayle@google.com>
This commit is contained in:
Andrew Walbran 2023-11-29 17:23:45 +00:00 committed by crosvm LUCI
parent 8821e8f414
commit f3dbf20eed
6 changed files with 23 additions and 20 deletions

13
Cargo.lock generated
View file

@ -1654,18 +1654,18 @@ dependencies = [
[[package]]
name = "memoffset"
version = "0.7.1"
version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
dependencies = [
"autocfg",
]
[[package]]
name = "memoffset"
version = "0.8.0"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
dependencies = [
"autocfg",
]
@ -1790,8 +1790,6 @@ dependencies = [
"bitflags 1.3.2",
"cfg-if",
"libc",
"memoffset 0.7.1",
"pin-utils",
"static_assertions",
]
@ -1804,6 +1802,7 @@ dependencies = [
"bitflags 2.3.2",
"cfg-if",
"libc",
"memoffset 0.9.0",
]
[[package]]
@ -2310,7 +2309,7 @@ dependencies = [
"cfg-if",
"libc",
"log",
"nix 0.26.2",
"nix 0.27.1",
"pkg-config",
"remain",
"thiserror",

View file

@ -27,7 +27,7 @@ zerocopy = { version = "0.7", features = ["derive"] }
log = "0.4"
[target.'cfg(any(target_os = "android", target_os = "linux"))'.dependencies]
nix = "0.26.1"
nix = { version = "0.27.1", features = ["event", "feature", "fs", "mman", "socket", "uio"] }
[target.'cfg(windows)'.dependencies]
winapi = "0.3"

View file

@ -8,7 +8,6 @@ use std::io::IoSliceMut;
use std::io::Seek;
use std::io::SeekFrom;
use std::os::unix::io::AsRawFd;
use std::os::unix::io::FromRawFd;
use std::os::unix::prelude::AsFd;
use libc::O_ACCMODE;
@ -160,8 +159,8 @@ impl CrossDomainContext {
)?;
let unix_addr = UnixAddr::new(base_channel)?;
connect(socket_fd, &unix_addr)?;
let stream = unsafe { File::from_raw_fd(socket_fd) };
connect(socket_fd.as_raw_fd(), &unix_addr)?;
let stream = socket_fd.into();
Ok(Some(stream))
}
@ -277,7 +276,7 @@ pub fn write_volatile(file: &File, opaque_data: &[u8]) -> RutabagaResult<()> {
}
pub fn channel() -> RutabagaResult<(Sender, Receiver)> {
let sender = unsafe { File::from_raw_fd(eventfd(0, EfdFlags::empty())?) };
let sender: File = eventfd(0, EfdFlags::empty())?.into();
let receiver = sender.try_clone()?;
Ok((sender, receiver))
}

View file

@ -4,6 +4,8 @@
use std::convert::TryFrom;
use std::fs::File;
use std::os::fd::AsFd;
use std::os::fd::BorrowedFd;
use std::os::unix::io::AsRawFd;
use std::os::unix::io::FromRawFd;
use std::os::unix::io::IntoRawFd;
@ -85,6 +87,14 @@ impl AsRawFd for Descriptor {
}
}
impl AsFd for SafeDescriptor {
fn as_fd(&self) -> BorrowedFd {
// SAFETY: the `BorrowedFd` we return lives no longer than this `SafeDescriptor`, so the
// descriptor will remain open.
unsafe { BorrowedFd::borrow_raw(self.descriptor) }
}
}
macro_rules! AsRawDescriptor {
($name:ident) => {
impl AsRawDescriptor for $name {

View file

@ -10,7 +10,6 @@ use nix::sys::mman::munmap;
use nix::sys::mman::MapFlags;
use nix::sys::mman::ProtFlags;
use crate::rutabaga_os::descriptor::AsRawDescriptor;
use crate::rutabaga_os::descriptor::SafeDescriptor;
use crate::rutabaga_utils::RutabagaError;
use crate::rutabaga_utils::RutabagaResult;
@ -59,7 +58,7 @@ impl MemoryMapping {
non_zero_size,
prot,
MapFlags::MAP_SHARED,
descriptor.as_raw_descriptor(),
Some(descriptor),
0,
)?
};

View file

@ -4,8 +4,6 @@
use std::convert::TryInto;
use std::ffi::CStr;
use std::os::unix::io::AsRawFd;
use std::os::unix::io::FromRawFd;
use std::os::unix::io::OwnedFd;
use libc::off_t;
@ -34,15 +32,13 @@ impl SharedMemory {
///
/// The file descriptor is opened with the close on exec flag and allows memfd sealing.
pub fn new(debug_name: &CStr, size: u64) -> RutabagaResult<SharedMemory> {
// Nix will transition to owned fd in future releases, do it locally here.
let raw_fd = memfd_create(
let fd = memfd_create(
debug_name,
MemFdCreateFlag::MFD_CLOEXEC | MemFdCreateFlag::MFD_ALLOW_SEALING,
)?;
let fd = unsafe { OwnedFd::from_raw_fd(raw_fd) };
let size_off_t: off_t = size.try_into()?;
ftruncate(fd.as_raw_fd(), size_off_t)?;
ftruncate(&fd, size_off_t)?;
Ok(SharedMemory { fd, size })
}