diff --git a/kernel/ksu.c b/kernel/ksu.c index a507665b..29e52748 100644 --- a/kernel/ksu.c +++ b/kernel/ksu.c @@ -1,5 +1,6 @@ #include "linux/fs.h" #include "linux/module.h" +#include "linux/moduleparam.h" #include "linux/workqueue.h" #include "allowlist.h" @@ -9,6 +10,9 @@ #include "ksu.h" #include "uid_observer.h" +int global_namespace_enable; +module_param(global_namespace_enable, int, S_IRUSR | S_IWUSR); + static struct workqueue_struct *ksu_workqueue; bool ksu_queue_work(struct work_struct *work) diff --git a/userspace/ksud/src/ksu.rs b/userspace/ksud/src/ksu.rs index 801df321..062b2a90 100644 --- a/userspace/ksud/src/ksu.rs +++ b/userspace/ksud/src/ksu.rs @@ -229,7 +229,10 @@ pub fn root_shell() -> Result<()> { // switch to global mount namespace #[cfg(any(target_os = "linux", target_os = "android"))] - if mount_master { + let global_namespace_enable = + std::fs::read_to_string("/sys/module/ksu/parameters/global_namespace_enable") + .unwrap_or("0".to_string()); + if global_namespace_enable.trim() == "1" || mount_master { let _ = utils::switch_mnt_ns(1); let _ = utils::unshare_mnt_ns(); }