From d6dfc3ac0ef959097e72816965546e06eda848f0 Mon Sep 17 00:00:00 2001 From: LoveSy Date: Sat, 5 Feb 2022 01:09:54 +0800 Subject: [PATCH] Unshare `/data/resource-cache` (#1627) to avoid overlay conflict --- core/magisk_module/customize.sh | 4 ++-- core/magisk_module/{lspd => daemon} | 2 ++ core/magisk_module/post-fs-data.sh | 2 +- core/magisk_module/service.sh | 2 +- core/src/main/cpp/external/DexBuilder | 2 +- core/src/main/cpp/main/src/jni/yahfa.cpp | 9 +++++---- .../org/lsposed/lspd/yahfa/dexmaker/HookerDexMaker.java | 1 + 7 files changed, 13 insertions(+), 9 deletions(-) rename core/magisk_module/{lspd => daemon} (95%) diff --git a/core/magisk_module/customize.sh b/core/magisk_module/customize.sh index b899f359..5a0db1ab 100644 --- a/core/magisk_module/customize.sh +++ b/core/magisk_module/customize.sh @@ -85,7 +85,7 @@ extract "$ZIPFILE" 'service.sh' "$MODPATH" extract "$ZIPFILE" 'uninstall.sh' "$MODPATH" extract "$ZIPFILE" 'framework/lspd.dex' "$MODPATH" extract "$ZIPFILE" 'daemon.apk' "$MODPATH" -extract "$ZIPFILE" 'lspd' "$MODPATH" +extract "$ZIPFILE" 'daemon' "$MODPATH" rm -f /data/adb/lspd/manager.apk extract "$ZIPFILE" 'manager.apk' '/data/adb/lspd' @@ -162,7 +162,7 @@ elif [ "$FLAVOR" == "riru" ]; then fi set_perm_recursive "$MODPATH" 0 0 0755 0644 -chmod 0744 "$MODPATH/lspd" +chmod 0744 "$MODPATH/daemon" if [ "$(grep_prop ro.maple.enable)" == "1" ] && [ "$FLAVOR" == "zygisk" ]; then ui_print "- Add ro.maple.enable=0" diff --git a/core/magisk_module/lspd b/core/magisk_module/daemon similarity index 95% rename from core/magisk_module/lspd rename to core/magisk_module/daemon index 920b97d9..ecb58757 100644 --- a/core/magisk_module/lspd +++ b/core/magisk_module/daemon @@ -24,5 +24,7 @@ if [ $debug = "true" ]; then fi fi +mount tmpfs -t tmpfs /data/resource-cache + # shellcheck disable=SC2086 exec /system/bin/app_process $java_options /system/bin --nice-name=lspd org.lsposed.lspd.Main "$@" >/dev/null 2>&1 diff --git a/core/magisk_module/post-fs-data.sh b/core/magisk_module/post-fs-data.sh index 31a7d6bb..9cfecedb 100644 --- a/core/magisk_module/post-fs-data.sh +++ b/core/magisk_module/post-fs-data.sh @@ -20,4 +20,4 @@ MODDIR=${0%/*} rm -f "/data/local/tmp/daemon.apk" -unshare -m sh -c "$MODDIR/lspd &" +unshare -m sh -c "$MODDIR/daemon &" diff --git a/core/magisk_module/service.sh b/core/magisk_module/service.sh index 9a977c6d..3d4e7d32 100644 --- a/core/magisk_module/service.sh +++ b/core/magisk_module/service.sh @@ -19,4 +19,4 @@ MODDIR=${0%/*} # post-fs-data.sh may be blocked by other modules. retry to start this -unshare -m "$MODDIR/lspd" --from-service "$@"& +unshare -m "$MODDIR/daemon" --from-service "$@"& diff --git a/core/src/main/cpp/external/DexBuilder b/core/src/main/cpp/external/DexBuilder index 236b1b03..9d202f44 160000 --- a/core/src/main/cpp/external/DexBuilder +++ b/core/src/main/cpp/external/DexBuilder @@ -1 +1 @@ -Subproject commit 236b1b03b4c6f9465faba94a0bae7ed8c99c6e67 +Subproject commit 9d202f44c90489ef4759328a3f55a56effdc9105 diff --git a/core/src/main/cpp/main/src/jni/yahfa.cpp b/core/src/main/cpp/main/src/jni/yahfa.cpp index 213bd092..f9e7d8ce 100644 --- a/core/src/main/cpp/main/src/jni/yahfa.cpp +++ b/core/src/main/cpp/main/src/jni/yahfa.cpp @@ -194,10 +194,11 @@ namespace lspd { kMid = JNI_GetMethodID(env, kInMemoryClassloader, "findClass", "(Ljava/lang/String;)Ljava/lang/Class;"); } - auto target = JNI_CallObjectMethod(env, my_cl, kMid, env->NewStringUTF("LspHooker_")); -// LOGD("Created %zd", image.size()); - if (target) { - return (jclass) target.release(); + if (my_cl) { + auto target = JNI_CallObjectMethod(env, my_cl, kMid, env->NewStringUTF("LspHooker_")); + if (target) { + return (jclass) target.release(); + } } return nullptr; } diff --git a/core/src/main/java/org/lsposed/lspd/yahfa/dexmaker/HookerDexMaker.java b/core/src/main/java/org/lsposed/lspd/yahfa/dexmaker/HookerDexMaker.java index 50148cae..8b396ed5 100644 --- a/core/src/main/java/org/lsposed/lspd/yahfa/dexmaker/HookerDexMaker.java +++ b/core/src/main/java/org/lsposed/lspd/yahfa/dexmaker/HookerDexMaker.java @@ -106,6 +106,7 @@ public class HookerDexMaker { private void doMake(String methodName) throws Exception { Class hookClass = Yahfa.buildHooker(LspHooker.class.getClassLoader(), getDescriptor(mReturnType), getDescriptors(mActualParameterTypes), methodName); + if (hookClass == null) throw new IllegalStateException("Failed to hook " + methodName); // Execute our newly-generated code in-process. Method backupMethod = hookClass.getMethod(METHOD_NAME_BACKUP, mActualParameterTypes); mHooker = new LspHooker(mHookInfo, mMember, backupMethod);