From c5ec2ff94bfb599c7e1926a98197256ed75ad291 Mon Sep 17 00:00:00 2001 From: 5ec1cff Date: Tue, 31 Dec 2024 13:48:25 +0800 Subject: [PATCH] ksud: make tmpfs and magic mount optional - Create /data/adb/ksu/{.notmpfs,.nomount} to disable them. --- userspace/ksud/src/defs.rs | 3 +++ userspace/ksud/src/init_event.rs | 18 +++++++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/userspace/ksud/src/defs.rs b/userspace/ksud/src/defs.rs index 5454def1..976a4d63 100644 --- a/userspace/ksud/src/defs.rs +++ b/userspace/ksud/src/defs.rs @@ -39,3 +39,6 @@ pub const VERSION_NAME: &str = include_str!(concat!(env!("OUT_DIR"), "/VERSION_N pub const KSU_BACKUP_DIR: &str = WORKING_DIR; pub const KSU_BACKUP_FILE_PREFIX: &str = "ksu_backup_"; pub const BACKUP_FILENAME: &str = "stock_image.sha1"; + +pub const NO_TMPFS_PATH: &str = concatcp!(WORKING_DIR, ".notmpfs"); +pub const NO_MOUNT_PATH: &str = concatcp!(WORKING_DIR, ".nomount"); diff --git a/userspace/ksud/src/init_event.rs b/userspace/ksud/src/init_event.rs index f5bb8b87..36d14522 100644 --- a/userspace/ksud/src/init_event.rs +++ b/userspace/ksud/src/init_event.rs @@ -1,4 +1,4 @@ -use crate::defs::{KSU_MOUNT_SOURCE, TEMP_DIR}; +use crate::defs::{KSU_MOUNT_SOURCE, NO_MOUNT_PATH, NO_TMPFS_PATH, TEMP_DIR}; use crate::module::{handle_updated_modules, prune_modules}; use crate::{assets, defs, ksucalls, restorecon, utils}; use anyhow::{Context, Result}; @@ -68,8 +68,12 @@ pub fn on_post_data_fs() -> Result<()> { } // mount temp dir - if let Err(e) = mount(KSU_MOUNT_SOURCE, TEMP_DIR, "tmpfs", MountFlags::empty(), "") { - warn!("do temp dir mount failed: {}", e); + if !Path::new(NO_TMPFS_PATH).exists() { + if let Err(e) = mount(KSU_MOUNT_SOURCE, TEMP_DIR, "tmpfs", MountFlags::empty(), "") { + warn!("do temp dir mount failed: {}", e); + } + } else { + info!("no tmpfs requested"); } // exec modules post-fs-data scripts @@ -84,8 +88,12 @@ pub fn on_post_data_fs() -> Result<()> { } // mount module systemlessly by magic mount - if let Err(e) = mount_modules_systemlessly() { - warn!("do systemless mount failed: {}", e); + if !Path::new(NO_MOUNT_PATH).exists() { + if let Err(e) = mount_modules_systemlessly() { + warn!("do systemless mount failed: {}", e); + } + } else { + info!("no mount requested"); } run_stage("post-mount", true);