From 8f4299ef6247700b3621edc3132024c5b31fa349 Mon Sep 17 00:00:00 2001 From: tiann Date: Thu, 6 Apr 2023 13:20:23 +0800 Subject: [PATCH] ksud: keep pwd after switch mnt ns --- userspace/ksud/src/module.rs | 1 + userspace/ksud/src/utils.rs | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/userspace/ksud/src/module.rs b/userspace/ksud/src/module.rs index ccba9396..0da9a926 100644 --- a/userspace/ksud/src/module.rs +++ b/userspace/ksud/src/module.rs @@ -333,6 +333,7 @@ fn _install_module(zip: &str) -> Result<()> { let mut buffer: Vec = Vec::new(); let entry_path = PathBuf::from_str("module.prop")?; let zip_path = PathBuf::from_str(zip)?; + let zip_path = zip_path.canonicalize()?; zip_extract_file_to_memory(&zip_path, &entry_path, &mut buffer)?; let mut module_prop = HashMap::new(); diff --git a/userspace/ksud/src/utils.rs b/userspace/ksud/src/utils.rs index e7814d31..4bffad6c 100644 --- a/userspace/ksud/src/utils.rs +++ b/userspace/ksud/src/utils.rs @@ -103,7 +103,11 @@ pub fn switch_mnt_ns(pid: i32) -> Result<()> { use std::os::fd::AsRawFd; let path = format!("/proc/{pid}/ns/mnt"); let fd = std::fs::File::open(path)?; + let current_dir = std::env::current_dir(); let ret = unsafe { libc::setns(fd.as_raw_fd(), libc::CLONE_NEWNS) }; + if let std::result::Result::Ok(current_dir) = current_dir { + let _ = std::env::set_current_dir(current_dir); + } ensure!(ret == 0, "switch mnt ns failed"); Ok(()) }