From 821380613075ac91410644cb9fed900ab6a1df61 Mon Sep 17 00:00:00 2001 From: namilsk Date: Sat, 10 Jan 2026 22:30:03 +0300 Subject: Fixed some security issues, `.wait()?` call for `udev`. Fixed one panic-possibility and started implementing killing zombie-processes funtional --- init/src/mounts/fstab.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'init/src/mounts/fstab.rs') diff --git a/init/src/mounts/fstab.rs b/init/src/mounts/fstab.rs index b8708e2..4d9b474 100644 --- a/init/src/mounts/fstab.rs +++ b/init/src/mounts/fstab.rs @@ -1,6 +1,8 @@ use crate::log::{log_critical_error, log_success, log_warning}; use libc::syscall; use std::ffi::CString; +use std::fs::{create_dir, metadata}; +use std::os::unix::fs::MetadataExt; use std::{fmt, fs}; #[derive(Debug)] @@ -114,7 +116,28 @@ impl FstabEntry { Ok((flags, data)) } + fn check_mount_point_permissions(path: &str) -> Result<(), Box> { + if !std::path::Path::new(path).exists() { + create_dir(path)?; + } + + let meta = metadata(path)?; + if !meta.is_dir() { + return Err(format!("Mount point {} is not a directory", path).into()); + } + let uid = meta.uid(); + if uid != 0 { + log_warning(&format!("Warning: Mount point {} not owned by root", path)); + } + + Ok(()) + } + pub fn mount(&self) -> Result<(), Box> { + if let Err(e) = Self::check_mount_point_permissions(&self.mountpoint) { + log_warning(&format!("Permission check failed for {}: {}", self.mountpoint, e)); + } + log_success(&format!( "Started mounting {} from {}", self.mountpoint, self.source -- cgit v1.2.3