Merge pull request #10982 from zvonkok/fix-zvonkos-fix

agent: fix permisssion according to runc
This commit is contained in:
Zvonko Kaiser 2025-03-05 15:08:48 -05:00 committed by GitHub
commit ae63bbb824
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -18,12 +18,13 @@ use std::collections::{HashMap, HashSet};
use std::fs::{self, OpenOptions};
use std::mem::MaybeUninit;
use std::os::unix;
use std::os::unix::fs::PermissionsExt;
use std::os::unix::io::RawFd;
use std::path::{Component, Path, PathBuf};
use path_absolutize::*;
use std::fs::File;
use std::io::{BufRead, BufReader};
use std::io::{BufRead, BufReader, ErrorKind};
use crate::container::DEFAULT_DEVICES;
use crate::selinux;
@ -1010,18 +1011,24 @@ lazy_static! {
};
}
fn permissions_from_path(path: &Path) -> Result<u32> {
match fs::metadata(path) {
Ok(metadata) => Ok(metadata.permissions().mode()),
Err(e) if e.kind() == ErrorKind::NotFound => Ok(0),
Err(e) => Err(e.into()),
}
}
fn mknod_dev(dev: &LinuxDevice, relpath: &Path) -> Result<()> {
let f = match LINUXDEVICETYPE.get(dev.typ().as_str()) {
Some(v) => v,
None => return Err(anyhow!("invalid spec".to_string())),
};
let file_mode = dev
.file_mode()
// drop the mode if it is 0
.filter(|&m| m != 0)
// fall back to 0o666
.unwrap_or(0o666);
let file_mode = match dev.file_mode().unwrap_or(0) {
0 => permissions_from_path(Path::new(dev.path()))?,
x => x,
};
stat::mknod(
relpath,