ksud: fmt & tidy

This commit is contained in:
weishu
2024-03-11 14:01:21 +08:00
parent ce5aa990ed
commit fe7ec370d4
8 changed files with 93 additions and 93 deletions

View File

@@ -162,7 +162,8 @@ pub fn patch(
.status()?; .status()?;
ensure!(status.success(), "magiskboot unpack failed"); ensure!(status.success(), "magiskboot unpack failed");
let is_kernelsu_patched = do_cpio_cmd(&magiskboot, workding_dir.path(), "exists kernelsu.ko").is_ok(); let is_kernelsu_patched =
do_cpio_cmd(&magiskboot, workding_dir.path(), "exists kernelsu.ko").is_ok();
if !is_kernelsu_patched { if !is_kernelsu_patched {
// kernelsu.ko is not exist, backup init if necessary // kernelsu.ko is not exist, backup init if necessary
let status = do_cpio_cmd(&magiskboot, workding_dir.path(), "exists init"); let status = do_cpio_cmd(&magiskboot, workding_dir.path(), "exists init");

View File

@@ -7,7 +7,7 @@ use android_logger::Config;
#[cfg(target_os = "android")] #[cfg(target_os = "android")]
use log::LevelFilter; use log::LevelFilter;
use crate::{apk_sign, debug, defs, event, module, utils}; use crate::{apk_sign, debug, defs, init_event, ksucalls, module, utils};
/// KernelSU userspace cli /// KernelSU userspace cli
#[derive(Parser, Debug)] #[derive(Parser, Debug)]
@@ -239,7 +239,7 @@ pub fn run() -> Result<()> {
// the kernel executes su with argv[0] = "su" and replace it with us // the kernel executes su with argv[0] = "su" and replace it with us
let arg0 = std::env::args().next().unwrap_or_default(); let arg0 = std::env::args().next().unwrap_or_default();
if arg0 == "su" || arg0 == "/system/bin/su" { if arg0 == "su" || arg0 == "/system/bin/su" {
return crate::ksu::root_shell(); return crate::su::root_shell();
} }
let cli = Args::parse(); let cli = Args::parse();
@@ -247,8 +247,8 @@ pub fn run() -> Result<()> {
log::info!("command: {:?}", cli.command); log::info!("command: {:?}", cli.command);
let result = match cli.command { let result = match cli.command {
Commands::PostFsData => event::on_post_data_fs(), Commands::PostFsData => init_event::on_post_data_fs(),
Commands::BootCompleted => event::on_boot_completed(), Commands::BootCompleted => init_event::on_boot_completed(),
Commands::Module { command } => { Commands::Module { command } => {
#[cfg(any(target_os = "linux", target_os = "android"))] #[cfg(any(target_os = "linux", target_os = "android"))]
@@ -265,13 +265,13 @@ pub fn run() -> Result<()> {
Module::Shrink => module::shrink_ksu_images(), Module::Shrink => module::shrink_ksu_images(),
} }
} }
Commands::Install => event::install(), Commands::Install => utils::install(),
Commands::Sepolicy { command } => match command { Commands::Sepolicy { command } => match command {
Sepolicy::Patch { sepolicy } => crate::sepolicy::live_patch(&sepolicy), Sepolicy::Patch { sepolicy } => crate::sepolicy::live_patch(&sepolicy),
Sepolicy::Apply { file } => crate::sepolicy::apply_file(file), Sepolicy::Apply { file } => crate::sepolicy::apply_file(file),
Sepolicy::Check { sepolicy } => crate::sepolicy::check_rule(&sepolicy), Sepolicy::Check { sepolicy } => crate::sepolicy::check_rule(&sepolicy),
}, },
Commands::Services => event::on_services(), Commands::Services => init_event::on_services(),
Commands::Profile { command } => match command { Commands::Profile { command } => match command {
Profile::GetSepolicy { package } => crate::profile::get_sepolicy(package), Profile::GetSepolicy { package } => crate::profile::get_sepolicy(package),
Profile::SetSepolicy { package, policy } => { Profile::SetSepolicy { package, policy } => {
@@ -291,11 +291,11 @@ pub fn run() -> Result<()> {
Ok(()) Ok(())
} }
Debug::Version => { Debug::Version => {
println!("Kernel Version: {}", crate::ksu::get_version()); println!("Kernel Version: {}", ksucalls::get_version());
Ok(()) Ok(())
} }
Debug::Su { global_mnt } => crate::ksu::grant_root(global_mnt), Debug::Su { global_mnt } => crate::su::grant_root(global_mnt),
Debug::Mount => event::mount_systemlessly(defs::MODULE_DIR), Debug::Mount => init_event::mount_modules_systemlessly(defs::MODULE_DIR),
Debug::Xcp { Debug::Xcp {
src, src,
dst, dst,

View File

@@ -1,13 +1,11 @@
use anyhow::{bail, Context, Result}; use anyhow::{bail, Context, Result};
use log::{info, warn}; use log::{info, warn};
#[cfg(target_os = "android")]
use std::path::PathBuf;
use std::{collections::HashMap, path::Path}; use std::{collections::HashMap, path::Path};
use crate::module::prune_modules; use crate::module::prune_modules;
use crate::{ use crate::{
assets, defs, mount, restorecon, assets, defs, ksucalls, mount, restorecon,
utils::{self, ensure_clean_dir, ensure_dir_exists}, utils::{self, ensure_clean_dir},
}; };
fn mount_partition(partition_name: &str, lowerdir: &Vec<String>) -> Result<()> { fn mount_partition(partition_name: &str, lowerdir: &Vec<String>) -> Result<()> {
@@ -35,7 +33,7 @@ fn mount_partition(partition_name: &str, lowerdir: &Vec<String>) -> Result<()> {
mount::mount_overlay(&partition, lowerdir, workdir, upperdir) mount::mount_overlay(&partition, lowerdir, workdir, upperdir)
} }
pub fn mount_systemlessly(module_dir: &str) -> Result<()> { pub fn mount_modules_systemlessly(module_dir: &str) -> Result<()> {
// construct overlay mount params // construct overlay mount params
let dir = std::fs::read_dir(module_dir); let dir = std::fs::read_dir(module_dir);
let Ok(dir) = dir else { let Ok(dir) = dir else {
@@ -99,7 +97,7 @@ pub fn mount_systemlessly(module_dir: &str) -> Result<()> {
} }
pub fn on_post_data_fs() -> Result<()> { pub fn on_post_data_fs() -> Result<()> {
crate::ksu::report_post_fs_data(); ksucalls::report_post_fs_data();
utils::umask(0); utils::umask(0);
@@ -162,7 +160,7 @@ pub fn on_post_data_fs() -> Result<()> {
.with_context(|| "mount module image failed".to_string())?; .with_context(|| "mount module image failed".to_string())?;
// tell kernel that we've mount the module, so that it can do some optimization // tell kernel that we've mount the module, so that it can do some optimization
crate::ksu::report_module_mounted(); ksucalls::report_module_mounted();
// if we are in safe mode, we should disable all modules // if we are in safe mode, we should disable all modules
if safe_mode { if safe_mode {
@@ -207,7 +205,7 @@ pub fn on_post_data_fs() -> Result<()> {
} }
// mount module systemlessly by overlay // mount module systemlessly by overlay
if let Err(e) = mount_systemlessly(module_dir) { if let Err(e) = mount_modules_systemlessly(module_dir) {
warn!("do systemless mount failed: {}", e); warn!("do systemless mount failed: {}", e);
} }
@@ -247,7 +245,7 @@ pub fn on_services() -> Result<()> {
} }
pub fn on_boot_completed() -> Result<()> { pub fn on_boot_completed() -> Result<()> {
crate::ksu::report_boot_complete(); ksucalls::report_boot_complete();
info!("on_boot_completed triggered!"); info!("on_boot_completed triggered!");
let module_update_img = Path::new(defs::MODULE_UPDATE_IMG); let module_update_img = Path::new(defs::MODULE_UPDATE_IMG);
let module_img = Path::new(defs::MODULE_IMG); let module_img = Path::new(defs::MODULE_IMG);
@@ -266,29 +264,6 @@ pub fn on_boot_completed() -> Result<()> {
Ok(()) Ok(())
} }
pub fn install() -> Result<()> {
ensure_dir_exists(defs::ADB_DIR)?;
std::fs::copy("/proc/self/exe", defs::DAEMON_PATH)?;
restorecon::lsetfilecon(defs::DAEMON_PATH, restorecon::ADB_CON)?;
// install binary assets
assets::ensure_binaries(false).with_context(|| "Failed to extract assets")?;
#[cfg(target_os = "android")]
link_ksud_to_bin()?;
Ok(())
}
#[cfg(target_os = "android")]
fn link_ksud_to_bin() -> Result<()> {
let ksu_bin = PathBuf::from(defs::DAEMON_PATH);
let ksu_bin_link = PathBuf::from(defs::DAEMON_LINK_PATH);
if ksu_bin.exists() && !ksu_bin_link.exists() {
std::os::unix::fs::symlink(&ksu_bin, &ksu_bin_link)?;
}
Ok(())
}
#[cfg(unix)] #[cfg(unix)]
fn catch_bootlog() -> Result<()> { fn catch_bootlog() -> Result<()> {
use std::os::unix::process::CommandExt; use std::os::unix::process::CommandExt;

View File

@@ -0,0 +1,43 @@
const EVENT_POST_FS_DATA: u64 = 1;
const EVENT_BOOT_COMPLETED: u64 = 2;
const EVENT_MODULE_MOUNTED: u64 = 3;
#[cfg(any(target_os = "linux", target_os = "android"))]
pub fn get_version() -> i32 {
rustix::process::ksu_get_version()
}
#[cfg(not(any(target_os = "linux", target_os = "android")))]
pub fn get_version() -> i32 {
0
}
#[cfg(any(target_os = "linux", target_os = "android"))]
fn report_event(event: u64) {
rustix::process::ksu_report_event(event)
}
#[cfg(not(any(target_os = "linux", target_os = "android")))]
fn report_event(_event: u64) {}
#[cfg(any(target_os = "linux", target_os = "android"))]
pub fn check_kernel_safemode() -> bool {
rustix::process::ksu_check_kernel_safemode()
}
#[cfg(not(any(target_os = "linux", target_os = "android")))]
pub fn check_kernel_safemode() -> bool {
false
}
pub fn report_post_fs_data() {
report_event(EVENT_POST_FS_DATA);
}
pub fn report_boot_complete() {
report_event(EVENT_BOOT_COMPLETED);
}
pub fn report_module_mounted() {
report_event(EVENT_MODULE_MOUNTED);
}

View File

@@ -4,13 +4,14 @@ mod boot_patch;
mod cli; mod cli;
mod debug; mod debug;
mod defs; mod defs;
mod event; mod init_event;
mod ksu; mod ksucalls;
mod module; mod module;
mod mount; mod mount;
mod profile; mod profile;
mod restorecon; mod restorecon;
mod sepolicy; mod sepolicy;
mod su;
mod utils; mod utils;
fn main() -> anyhow::Result<()> { fn main() -> anyhow::Result<()> {

View File

@@ -1,7 +1,7 @@
#[allow(clippy::wildcard_imports)] #[allow(clippy::wildcard_imports)]
use crate::utils::*; use crate::utils::*;
use crate::{ use crate::{
assets, defs, mount, assets, defs, ksucalls, mount,
restorecon::{restore_syscon, setsyscon}, restorecon::{restore_syscon, setsyscon},
sepolicy, utils, sepolicy, utils,
}; };
@@ -53,7 +53,7 @@ fn exec_install_script(module_file: &str) -> Result<()> {
), ),
) )
.env("KSU", "true") .env("KSU", "true")
.env("KSU_KERNEL_VER_CODE", crate::ksu::get_version().to_string()) .env("KSU_KERNEL_VER_CODE", ksucalls::get_version().to_string())
.env("KSU_VER", defs::VERSION_NAME) .env("KSU_VER", defs::VERSION_NAME)
.env("KSU_VER_CODE", defs::VERSION_CODE) .env("KSU_VER_CODE", defs::VERSION_CODE)
.env("OUTFD", "1") .env("OUTFD", "1")
@@ -178,7 +178,7 @@ fn exec_script<T: AsRef<Path>>(path: T, wait: bool) -> Result<()> {
.arg(path.as_ref()) .arg(path.as_ref())
.env("ASH_STANDALONE", "1") .env("ASH_STANDALONE", "1")
.env("KSU", "true") .env("KSU", "true")
.env("KSU_KERNEL_VER_CODE", crate::ksu::get_version().to_string()) .env("KSU_KERNEL_VER_CODE", ksucalls::get_version().to_string())
.env("KSU_VER_CODE", defs::VERSION_CODE) .env("KSU_VER_CODE", defs::VERSION_CODE)
.env("KSU_VER", defs::VERSION_NAME) .env("KSU_VER", defs::VERSION_NAME)
.env( .env(

View File

@@ -17,10 +17,6 @@ use rustix::{
thread::{set_thread_res_gid, set_thread_res_uid, Gid, Uid}, thread::{set_thread_res_gid, set_thread_res_uid, Gid, Uid},
}; };
const EVENT_POST_FS_DATA: u64 = 1;
const EVENT_BOOT_COMPLETED: u64 = 2;
const EVENT_MODULE_MOUNTED: u64 = 3;
#[cfg(any(target_os = "linux", target_os = "android"))] #[cfg(any(target_os = "linux", target_os = "android"))]
pub fn grant_root(global_mnt: bool) -> Result<()> { pub fn grant_root(global_mnt: bool) -> Result<()> {
const KERNEL_SU_OPTION: u32 = 0xDEAD_BEEF; const KERNEL_SU_OPTION: u32 = 0xDEAD_BEEF;
@@ -303,43 +299,3 @@ fn add_path_to_env(path: &str) -> Result<()> {
env::set_var("PATH", new_path_env); env::set_var("PATH", new_path_env);
Ok(()) Ok(())
} }
#[cfg(any(target_os = "linux", target_os = "android"))]
pub fn get_version() -> i32 {
rustix::process::ksu_get_version()
}
#[cfg(not(any(target_os = "linux", target_os = "android")))]
pub fn get_version() -> i32 {
0
}
#[cfg(any(target_os = "linux", target_os = "android"))]
fn report_event(event: u64) {
rustix::process::ksu_report_event(event)
}
#[cfg(not(any(target_os = "linux", target_os = "android")))]
fn report_event(_event: u64) {}
#[cfg(any(target_os = "linux", target_os = "android"))]
pub fn check_kernel_safemode() -> bool {
rustix::process::ksu_check_kernel_safemode()
}
#[cfg(not(any(target_os = "linux", target_os = "android")))]
pub fn check_kernel_safemode() -> bool {
false
}
pub fn report_post_fs_data() {
report_event(EVENT_POST_FS_DATA);
}
pub fn report_boot_complete() {
report_event(EVENT_BOOT_COMPLETED);
}
pub fn report_module_mounted() {
report_event(EVENT_MODULE_MOUNTED);
}

View File

@@ -5,7 +5,7 @@ use std::{
path::Path, path::Path,
}; };
use crate::defs; use crate::{assets, defs, ksucalls, restorecon};
use std::fs::metadata; use std::fs::metadata;
#[allow(unused_imports)] #[allow(unused_imports)]
use std::fs::{set_permissions, Permissions}; use std::fs::{set_permissions, Permissions};
@@ -16,6 +16,7 @@ use hole_punch::*;
use std::io::{Read, Seek, SeekFrom}; use std::io::{Read, Seek, SeekFrom};
use jwalk::WalkDir; use jwalk::WalkDir;
use std::path::PathBuf;
#[cfg(any(target_os = "linux", target_os = "android"))] #[cfg(any(target_os = "linux", target_os = "android"))]
use rustix::{ use rustix::{
@@ -108,7 +109,7 @@ pub fn is_safe_mode() -> bool {
if safemode { if safemode {
return true; return true;
} }
let safemode = crate::ksu::check_kernel_safemode(); let safemode = ksucalls::check_kernel_safemode();
log::info!("kernel_safemode: {}", safemode); log::info!("kernel_safemode: {}", safemode);
safemode safemode
} }
@@ -193,6 +194,29 @@ pub fn get_tmp_path() -> &'static str {
"" ""
} }
#[cfg(target_os = "android")]
fn link_ksud_to_bin() -> Result<()> {
let ksu_bin = PathBuf::from(defs::DAEMON_PATH);
let ksu_bin_link = PathBuf::from(defs::DAEMON_LINK_PATH);
if ksu_bin.exists() && !ksu_bin_link.exists() {
std::os::unix::fs::symlink(&ksu_bin, &ksu_bin_link)?;
}
Ok(())
}
pub fn install() -> Result<()> {
ensure_dir_exists(defs::ADB_DIR)?;
std::fs::copy("/proc/self/exe", defs::DAEMON_PATH)?;
restorecon::lsetfilecon(defs::DAEMON_PATH, restorecon::ADB_CON)?;
// install binary assets
assets::ensure_binaries(false).with_context(|| "Failed to extract assets")?;
#[cfg(target_os = "android")]
link_ksud_to_bin()?;
Ok(())
}
// TODO: use libxcp to improve the speed if cross's MSRV is 1.70 // TODO: use libxcp to improve the speed if cross's MSRV is 1.70
pub fn copy_sparse_file<P: AsRef<Path>, Q: AsRef<Path>>( pub fn copy_sparse_file<P: AsRef<Path>, Q: AsRef<Path>>(
src: P, src: P,