Use unix_mode crate to check file modes in binfmt registration

This commit is contained in:
Julius Michaelis
2022-01-07 21:08:37 +09:00
parent 248735cb8b
commit 3bb95d51ed
3 changed files with 12 additions and 1 deletions

7
Cargo.lock generated
View File

@@ -2545,6 +2545,12 @@ dependencies = [
"regex", "regex",
] ]
[[package]]
name = "unix_mode"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "35abed4630bb800f02451a7428205d1f37b8e125001471bfab259beee6a587ed"
[[package]] [[package]]
name = "vec_map" name = "vec_map"
version = "0.8.2" version = "0.8.2"
@@ -2819,6 +2825,7 @@ dependencies = [
"log", "log",
"structopt", "structopt",
"tempfile", "tempfile",
"unix_mode",
"wasmer", "wasmer",
"wasmer-cache", "wasmer-cache",
"wasmer-compiler", "wasmer-compiler",

View File

@@ -55,6 +55,9 @@ fern = { version = "0.6", features = ["colored"], optional = true }
log = { version = "0.4", optional = true } log = { version = "0.4", optional = true }
tempfile = "3" tempfile = "3"
[target.'cfg(target_os = "linux")'.dependencies]
unix_mode = "0.1.3"
[features] [features]
# Don't add the compiler features in default, please add them on the Makefile # Don't add the compiler features in default, please add them on the Makefile
# since we might want to autoconfigure them depending on the availability on the host. # since we might want to autoconfigure them depending on the availability on the host.

View File

@@ -43,8 +43,9 @@ fn seccheck(path: &Path) -> Result<()> {
} }
let m = std::fs::metadata(path) let m = std::fs::metadata(path)
.with_context(|| format!("Can't check permissions of {}", path.to_string_lossy()))?; .with_context(|| format!("Can't check permissions of {}", path.to_string_lossy()))?;
use unix_mode::*;
anyhow::ensure!( anyhow::ensure!(
m.mode() & 0o2 == 0 || m.mode() & 0o1000 != 0, !is_allowed(Accessor::Other, Access::Write, m.mode()) || is_sticky(m.mode()),
"{} is world writeable and not sticky", "{} is world writeable and not sticky",
path.to_string_lossy() path.to_string_lossy()
); );