From 6839cb9ab2ec916296ff1511d108f9b928ac79d2 Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Fri, 8 Aug 2025 17:16:17 -0700 Subject: [PATCH] Keep /system/xbin/su on emulators --- native/src/core/module.rs | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/native/src/core/module.rs b/native/src/core/module.rs index 519319bc7..d87e2daaf 100644 --- a/native/src/core/module.rs +++ b/native/src/core/module.rs @@ -376,7 +376,7 @@ fn get_path_env() -> String { .unwrap_or_default() } -fn inject_magisk_bins(system: &mut FsNode) { +fn inject_magisk_bins(system: &mut FsNode, is_emulator: bool) { fn inject(children: &mut FsNodeMap) { let mut path = cstr::buf::default().join_path(get_magisk_tmp()); @@ -418,7 +418,7 @@ fn inject_magisk_bins(system: &mut FsNode) { let mut candidates = vec![]; for orig_item in path_env.split(':') { - // Filter not suitbale paths + // Filter non-suitable paths if !MAGISK_BIN_INJECT_PARTITIONS .iter() .any(|p| orig_item.starts_with(p.as_str())) @@ -430,6 +430,11 @@ fn inject_magisk_bins(system: &mut FsNode) { continue; } + // We want to keep /system/xbin/su on emulators (for debugging) + if is_emulator && orig_item.starts_with("/system/xbin") { + continue; + } + // Override existing su first let su_path = Utf8CString::from(format!("{orig_item}/su")); if su_path.exists() { @@ -555,7 +560,7 @@ fn inject_zygisk_bins(system: &mut FsNode) { } } -fn apply_modules(zygisk: bool, module_list: &[ModuleInfo]) { +fn apply_modules(zygisk: bool, module_list: &[ModuleInfo], is_emulator: bool) { let mut system = FsNode::new_dir(); // Build all the base "prefix" paths @@ -620,7 +625,7 @@ fn apply_modules(zygisk: bool, module_list: &[ModuleInfo]) { // step, treating Magisk just like a special "module". if get_magisk_tmp() != "/sbin" || get_path_env().split(":").all(|s| s != "/sbin") { - inject_magisk_bins(&mut system); + inject_magisk_bins(&mut system, is_emulator); } if zygisk { inject_zygisk_bins(&mut system); @@ -875,7 +880,7 @@ impl MagiskD { if zygisk { set_zygisk_prop(); } - apply_modules(zygisk, &modules); + apply_modules(zygisk, &modules, self.is_emulator); self.module_list.set(modules).ok(); }