From 5c00071fedf84f5089bffb3f62f26a6a8d331304 Mon Sep 17 00:00:00 2001 From: Nullptr Date: Wed, 15 Feb 2023 11:06:46 +0800 Subject: [PATCH] Use relative path --- loader/src/external/liblsplt | 2 +- loader/src/injector/entry.cpp | 2 ++ loader/src/loader/loader.cpp | 4 ++-- module/src/customize.sh | 1 - module/src/daemon.sh | 3 +-- module/src/post-fs-data.sh | 5 ++++- module/src/service.sh | 1 - zygiskd/src/constants.rs | 8 +++----- zygiskd/src/watchdog.rs | 23 ++++++----------------- zygiskd/src/zygiskd.rs | 8 ++++---- 10 files changed, 23 insertions(+), 34 deletions(-) delete mode 100644 module/src/service.sh diff --git a/loader/src/external/liblsplt b/loader/src/external/liblsplt index 204a163..b254b5b 160000 --- a/loader/src/external/liblsplt +++ b/loader/src/external/liblsplt @@ -1 +1 @@ -Subproject commit 204a1636884d397617101e2bae3a78dd3febb163 +Subproject commit b254b5b9a56a16cfddfd78887afc702af5380c38 diff --git a/loader/src/injector/entry.cpp b/loader/src/injector/entry.cpp index 3da0e2e..c1f8dc3 100644 --- a/loader/src/injector/entry.cpp +++ b/loader/src/injector/entry.cpp @@ -18,7 +18,9 @@ static void zygisk_cleanup_wait() { extern "C" [[gnu::visibility("default")]] void entry(void *handle) { +#ifdef NDEBUG logging::setfd(zygiskd::RequestLogcatFd()); +#endif self_handle = handle; LOGD("Load injector successfully"); diff --git a/loader/src/loader/loader.cpp b/loader/src/loader/loader.cpp index 1e4d5c2..61e433b 100644 --- a/loader/src/loader/loader.cpp +++ b/loader/src/loader/loader.cpp @@ -43,9 +43,9 @@ void Constructor() { std::string native_bridge; do { if (!zygiskd::PingHeartbeat()) break; - +#ifdef NDEBUG logging::setfd(zygiskd::RequestLogcatFd()); - +#endif LOGI("Read native bridge"); native_bridge = zygiskd::ReadNativeBridge(); diff --git a/module/src/customize.sh b/module/src/customize.sh index c071ed6..88fa98c 100644 --- a/module/src/customize.sh +++ b/module/src/customize.sh @@ -63,7 +63,6 @@ extract "$ZIPFILE" 'daemon.sh' "$MODPATH" extract "$ZIPFILE" 'module.prop' "$MODPATH" extract "$ZIPFILE" 'post-fs-data.sh' "$MODPATH" extract "$ZIPFILE" 'sepolicy.rule' "$MODPATH" -extract "$ZIPFILE" 'service.sh' "$MODPATH" HAS32BIT=false && [ -d "/system/lib" ] && HAS32BIT=true HAS64BIT=false && [ -d "/system/lib64" ] && HAS64BIT=true diff --git a/module/src/daemon.sh b/module/src/daemon.sh index f4c1eb9..2347bb4 100644 --- a/module/src/daemon.sh +++ b/module/src/daemon.sh @@ -1,7 +1,6 @@ #!/system/bin/sh DEBUG=@DEBUG@ -MODDIR=${0%/*} # shellcheck disable=SC2155 export NATIVE_BRIDGE=$(getprop ro.dalvik.vm.native.bridge) @@ -9,4 +8,4 @@ export NATIVE_BRIDGE=$(getprop ro.dalvik.vm.native.bridge) log -p i -t "zygisksu" "Start watchdog" resetprop ro.dalvik.vm.native.bridge libzygiskloader.so -exec "$MODDIR/bin/zygiskwd" "watchdog" >/dev/null 2>&1 +exec "bin/zygiskwd" "watchdog" >/dev/null 2>&1 diff --git a/module/src/post-fs-data.sh b/module/src/post-fs-data.sh index cbfc235..95563b0 100644 --- a/module/src/post-fs-data.sh +++ b/module/src/post-fs-data.sh @@ -1,5 +1,8 @@ #!/system/bin/sh MODDIR=${0%/*} + +cd $MODDIR export NATIVE_BRIDGE=$(getprop ro.dalvik.vm.native.bridge) -unshare -m sh -c "$MODDIR/daemon.sh $@&" + +unshare -m sh -c "./daemon.sh $@&" diff --git a/module/src/service.sh b/module/src/service.sh deleted file mode 100644 index 58d21e5..0000000 --- a/module/src/service.sh +++ /dev/null @@ -1 +0,0 @@ -#!/system/bin/sh diff --git a/zygiskd/src/constants.rs b/zygiskd/src/constants.rs index 3bd9108..976a4de 100644 --- a/zygiskd/src/constants.rs +++ b/zygiskd/src/constants.rs @@ -26,11 +26,9 @@ pub const PROP_NATIVE_BRIDGE: &str = "ro.dalvik.vm.native.bridge"; pub const SOCKET_PLACEHOLDER: &str = "socket_placeholder"; -pub const PATH_KSU_MODULE_DIR: &str = "/data/adb/ksu/modules"; -pub const PATH_ZYGISKSU_DIR: &str = concatcp!(PATH_KSU_MODULE_DIR, "/zygisksu"); -pub const PATH_ZYGISKD32: &str = concatcp!(PATH_ZYGISKSU_DIR, "/bin/zygiskd32"); -pub const PATH_ZYGISKD64: &str = concatcp!(PATH_ZYGISKSU_DIR, "/bin/zygiskd64"); -pub const PATH_DAEMON_LOCK: &str = concatcp!(PATH_ZYGISKSU_DIR, "/zygiskd.lock"); +pub const PATH_MODULE_DIR: &str = ".."; +pub const PATH_ZYGISKD32: &str = "bin/zygiskd32"; +pub const PATH_ZYGISKD64: &str = "bin/zygiskd64"; #[derive(Debug, Eq, PartialEq, TryFromPrimitive)] #[repr(u8)] diff --git a/zygiskd/src/watchdog.rs b/zygiskd/src/watchdog.rs index 7ca6738..730de53 100644 --- a/zygiskd/src/watchdog.rs +++ b/zygiskd/src/watchdog.rs @@ -1,15 +1,14 @@ use crate::{constants, utils}; use anyhow::{bail, Result}; -use nix::fcntl::{flock, FlockArg}; use nix::unistd::{getgid, getuid}; -use std::os::unix::prelude::AsRawFd; use std::process::{Child, Command}; use std::sync::mpsc; use std::{fs, thread}; +use std::os::unix::net::UnixListener; use std::path::Path; use std::time::Duration; -static mut LOCK_FILE: Option = None; +static mut LOCK: Option = None; pub fn entry() -> Result<()> { log::info!("Start zygisksu watchdog"); @@ -32,7 +31,6 @@ fn check_permission() -> Result<()> { let context = fs::read_to_string("/proc/self/attr/current")?; let context = context.trim_end_matches('\0'); - //TODO: remove magisk context after debug finished if context != "u:r:su:s0" && context != "u:r:magisk:s0" { bail!("SELinux context incorrect: {context}"); } @@ -42,19 +40,10 @@ fn check_permission() -> Result<()> { fn ensure_single_instance() -> Result<()> { log::info!("Ensure single instance"); - let metadata = fs::metadata(constants::PATH_ZYGISKSU_DIR); - if metadata.is_err() || !metadata.unwrap().is_dir() { - bail!("Zygisksu is not installed"); - } - unsafe { - match fs::File::create(constants::PATH_DAEMON_LOCK) { - Ok(file) => LOCK_FILE = Some(file), - Err(e) => bail!("Failed to open lock file: {e}"), - }; - let fd = LOCK_FILE.as_ref().unwrap().as_raw_fd(); - if let Err(e) = flock(fd, FlockArg::LockExclusiveNonblock) { - bail!("Failed to acquire lock: {e}. Maybe another instance is running?"); - } + let name = String::from("zygiskwd") + constants::SOCKET_PLACEHOLDER; + match utils::abstract_namespace_socket(&name) { + Ok(socket) => unsafe { LOCK = Some(socket) }, + Err(e) => bail!("Failed to acquire lock: {e}. Maybe another instance is running?") } Ok(()) } diff --git a/zygiskd/src/zygiskd.rs b/zygiskd/src/zygiskd.rs index 4db845e..40bb324 100644 --- a/zygiskd/src/zygiskd.rs +++ b/zygiskd/src/zygiskd.rs @@ -77,7 +77,7 @@ fn get_arch() -> Result<&'static str> { fn load_modules(arch: &str) -> Result> { let mut modules = Vec::new(); - let dir = match fs::read_dir(constants::PATH_KSU_MODULE_DIR) { + let dir = match fs::read_dir(constants::PATH_MODULE_DIR) { Ok(dir) => dir, Err(e) => { log::warn!("Failed reading modules directory: {}", e); @@ -137,8 +137,8 @@ fn create_memfd(name: &str, so_path: &PathBuf) -> Result { fn create_daemon_socket() -> Result { utils::set_socket_create_context("u:r:zygote:s0")?; - let suffix = lp_select!("zygiskd32", "zygiskd64"); - let name = String::from(suffix) + constants::SOCKET_PLACEHOLDER; + let prefix = lp_select!("zygiskd32", "zygiskd64"); + let name = String::from(prefix) + constants::SOCKET_PLACEHOLDER; let listener = utils::abstract_namespace_socket(&name)?; log::debug!("Daemon socket: {name}"); Ok(listener) @@ -221,7 +221,7 @@ fn handle_daemon_action(mut stream: UnixStream, context: &Context) -> Result<()> DaemonSocketAction::GetModuleDir => { let index = stream.read_usize()?; let module = &context.modules[index]; - let dir = format!("{}/{}", constants::PATH_KSU_MODULE_DIR, module.name); + let dir = format!("{}/{}", constants::PATH_MODULE_DIR, module.name); let dir = fs::File::open(dir)?; stream.send_fd(dir.as_raw_fd())?; }