From 58fff36b4e0986f130c40c52782ecef2c08809ae Mon Sep 17 00:00:00 2001 From: 4lDO2 <4lDO2@protonmail.com> Date: Sun, 18 Jun 2023 19:39:34 +0200 Subject: [PATCH] Prefer libc over redox_syscall in mount. --- Cargo.lock | 82 ++++++++++++++++++++++++++---------------------- Cargo.toml | 2 +- src/bin/mount.rs | 37 ++++++++++------------ 3 files changed, 61 insertions(+), 60 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d1cc15975e..c794fe8d5b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -31,9 +31,9 @@ dependencies = [ [[package]] name = "aho-corasick" -version = "0.7.20" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +checksum = "43f6cb1bf222025340178f382c426f13757b2960e89779dfcb319c32542a5a41" dependencies = [ "memchr", ] @@ -133,9 +133,9 @@ dependencies = [ [[package]] name = "cpufeatures" -version = "0.2.6" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181" +checksum = "03e69e28e9f7f77debdedbaafa2866e1de9ba56df55a8bd7cfc724c25a09987c" dependencies = [ "libc", ] @@ -152,9 +152,9 @@ dependencies = [ [[package]] name = "digest" -version = "0.10.6" +version = "0.10.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" dependencies = [ "block-buffer", "crypto-common", @@ -230,9 +230,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.9" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" +checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427" dependencies = [ "cfg-if", "libc", @@ -241,9 +241,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.27.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0a93d233ebf96623465aad4046a8d3aa4da22d4f4beba5388838c8a434bbb4" +checksum = "b6c80984affa11d98d1b88b66ac8853f143217b399d3c74116778ff8fdb4ed2e" [[package]] name = "hermit-abi" @@ -262,18 +262,15 @@ checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" [[package]] name = "libc" -version = "0.2.141" +version = "0.2.146" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5" +checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b" [[package]] name = "log" -version = "0.4.17" +version = "0.4.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" -dependencies = [ - "cfg-if", -] +checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" [[package]] name = "memchr" @@ -298,9 +295,9 @@ checksum = "b8f8bdf33df195859076e54ab11ee78a1b208382d3a26ec40d142ffc1ecc49ef" [[package]] name = "object" -version = "0.30.3" +version = "0.30.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea86265d3d3dcb6a27fc51bd29a4bf387fae9d2986b823079d4986af253eb439" +checksum = "03b4680b86d9cfafba8fc491dc9b6df26b68cf40e9e6cd73909194759a63c385" dependencies = [ "memchr", ] @@ -323,24 +320,24 @@ dependencies = [ [[package]] name = "pkg-config" -version = "0.3.26" +version = "0.3.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160" +checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" [[package]] name = "proc-macro2" -version = "1.0.56" +version = "1.0.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435" +checksum = "dec2b086b7a862cf4de201096214fa870344cf922b2b30c167badb3af3195406" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.26" +version = "1.0.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc" +checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" dependencies = [ "proc-macro2", ] @@ -407,13 +404,22 @@ dependencies = [ "bitflags", ] +[[package]] +name = "redox_syscall" +version = "0.3.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +dependencies = [ + "bitflags", +] + [[package]] name = "redox_termios" version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8440d8acb4fd3d277125b4bd01a6f38aee8d814b3b5fc09b3f2b825d37d3fe8f" dependencies = [ - "redox_syscall", + "redox_syscall 0.2.16", ] [[package]] @@ -430,7 +436,7 @@ dependencies = [ "libc", "log", "redox_simple_endian", - "redox_syscall", + "redox_syscall 0.3.5", "seahash", "termion", "time", @@ -439,9 +445,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.7.3" +version = "1.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b1f693b24f6ac912f4893ef08244d70b6067480d2f1a46e950c9691e6749d1d" +checksum = "d0ab3ca65655bb1e41f2a8c8cd662eb4fb035e67c3f78da1d61dffe89d07300f" dependencies = [ "aho-corasick", "memchr", @@ -450,15 +456,15 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.6.29" +version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" +checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78" [[package]] name = "rustc-demangle" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a36c42d1873f9a77c53bde094f9664d9891bc604a45b4798fd2c389ed12e5b" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" [[package]] name = "seahash" @@ -474,9 +480,9 @@ checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" [[package]] name = "subtle" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] name = "syn" @@ -518,7 +524,7 @@ checksum = "077185e2eac69c3f8379a4298e1e07cd36beb962290d4a51199acf0fdc10607e" dependencies = [ "libc", "numtoa", - "redox_syscall", + "redox_syscall 0.2.16", "redox_termios", ] @@ -541,9 +547,9 @@ checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" [[package]] name = "unicode-ident" -version = "1.0.8" +version = "1.0.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4" +checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" [[package]] name = "unicode-xid" diff --git a/Cargo.toml b/Cargo.toml index 03363eb865..eac92abbb9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -39,7 +39,7 @@ failure = "0.1.8" getrandom = { version = "0.2.5", optional = true } libc = "0.2" log = { version = "0.4.14", default-features = false, optional = true} -redox_syscall = "0.2.12" +redox_syscall = "0.3" seahash = { version = "4.1.0", default-features = false } termion = { version = "1.5.6", optional = true } uuid = { version = "0.5", default-features = false } diff --git a/src/bin/mount.rs b/src/bin/mount.rs index 62abb6122a..4a9bbdb785 100644 --- a/src/bin/mount.rs +++ b/src/bin/mount.rs @@ -1,4 +1,3 @@ -#[cfg(not(target_os = "redox"))] extern crate libc; #[cfg(target_os = "redox")] @@ -13,13 +12,19 @@ use std::io::{self, Read, Write}; use std::os::unix::io::{FromRawFd, RawFd}; use std::process; +#[cfg(target_os = "redox")] +use std::{ + mem::MaybeUninit, + ptr::addr_of_mut, + sync::atomic::Ordering, +}; + use redoxfs::{mount, DiskCache, DiskFile, FileSystem}; use termion::input::TermRead; use uuid::Uuid; #[cfg(target_os = "redox")] extern "C" fn unmount_handler(_s: usize) { - use std::sync::atomic::Ordering; redoxfs::IS_UMT.store(1, Ordering::SeqCst); } @@ -28,27 +33,27 @@ extern "C" fn unmount_handler(_s: usize) { //for, so I put 2. I don't think 0,0 is a valid sa_mask. I don't know what i'm doing here. When u //send it a sigkill, it shuts off the filesystem fn setsig() { - use syscall::{sigaction, SigAction, SigActionFlags, SIGTERM}; + // TODO: High-level wrapper like the nix crate? + unsafe { + let mut action = MaybeUninit::::uninit(); - let sig_action = SigAction { - sa_handler: Some(unmount_handler), - sa_mask: [0, 0], - sa_flags: SigActionFlags::empty(), - }; + assert_eq!(libc::sigemptyset(addr_of_mut!((*action.as_mut_ptr()).sa_mask)), 0); + addr_of_mut!((*action.as_mut_ptr()).sa_flags).write(0); + addr_of_mut!((*action.as_mut_ptr()).sa_sigaction).write(unmount_handler as usize); - sigaction(SIGTERM, Some(&sig_action), None).unwrap(); + + assert_eq!(libc::sigaction(libc::SIGTERM, action.as_ptr(), core::ptr::null_mut()), 0); + } } #[cfg(not(target_os = "redox"))] // on linux, this is implemented properly, so no need for this unscrupulous nonsense! fn setsig() {} -#[cfg(not(target_os = "redox"))] fn fork() -> isize { unsafe { libc::fork() as isize } } -#[cfg(not(target_os = "redox"))] fn pipe(pipes: &mut [i32; 2]) -> isize { unsafe { libc::pipe(pipes.as_mut_ptr()) as isize } } @@ -61,16 +66,6 @@ fn bootloader_password() -> Option> { None } -#[cfg(target_os = "redox")] -fn fork() -> isize { - unsafe { libc::fork() as isize } -} - -#[cfg(target_os = "redox")] -fn pipe(pipes: &mut [usize; 2]) -> isize { - syscall::Error::mux(syscall::pipe2(pipes, 0)) as isize -} - #[cfg(target_os = "redox")] fn capability_mode() { syscall::setrens(0, 0).expect("redoxfs: failed to enter null namespace");