From 2eccc90cccb6c15343cd52be38c4118c73585015 Mon Sep 17 00:00:00 2001 From: tiann Date: Fri, 23 Dec 2022 12:50:07 +0800 Subject: [PATCH] manager: improve become_manager validation --- manager/app/src/main/cpp/jni.cc | 7 +++++-- manager/app/src/main/cpp/ksu.cc | 8 ++++++-- manager/app/src/main/cpp/ksu.h | 2 +- manager/app/src/main/java/me/weishu/kernelsu/Natives.java | 2 +- .../src/main/java/me/weishu/kernelsu/ui/screen/Home.kt | 2 +- 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/manager/app/src/main/cpp/jni.cc b/manager/app/src/main/cpp/jni.cc index ddb18d89..165ba7b2 100644 --- a/manager/app/src/main/cpp/jni.cc +++ b/manager/app/src/main/cpp/jni.cc @@ -11,8 +11,11 @@ extern "C" JNIEXPORT jboolean JNICALL -Java_me_weishu_kernelsu_Natives_becomeManager(JNIEnv *env, jclass clazz) { - return become_manager(); +Java_me_weishu_kernelsu_Natives_becomeManager(JNIEnv *env, jclass clazz, jstring pkg) { + auto cpkg = env->GetStringUTFChars(pkg, nullptr); + auto result = become_manager(cpkg); + env->ReleaseStringUTFChars(pkg, cpkg); + return result; } extern "C" diff --git a/manager/app/src/main/cpp/ksu.cc b/manager/app/src/main/cpp/ksu.cc index ef662a9f..6cb083f1 100644 --- a/manager/app/src/main/cpp/ksu.cc +++ b/manager/app/src/main/cpp/ksu.cc @@ -4,6 +4,8 @@ #include #include +#include +#include #include "ksu.h" @@ -24,8 +26,10 @@ static bool ksuctl(int cmd, void* arg1, void* arg2) { return result == KERNEL_SU_OPTION; } -bool become_manager() { - return ksuctl(CMD_BECOME_MANAGER, nullptr, nullptr); +bool become_manager(const char* pkg) { + char param[128]; + sprintf(param, "/data/data/%s", pkg); + return ksuctl(CMD_BECOME_MANAGER, param, nullptr); } int get_version() { diff --git a/manager/app/src/main/cpp/ksu.h b/manager/app/src/main/cpp/ksu.h index d4680470..6a6758cc 100644 --- a/manager/app/src/main/cpp/ksu.h +++ b/manager/app/src/main/cpp/ksu.h @@ -5,7 +5,7 @@ #ifndef KERNELSU_KSU_H #define KERNELSU_KSU_H -bool become_manager(); +bool become_manager(const char*); int get_version(); diff --git a/manager/app/src/main/java/me/weishu/kernelsu/Natives.java b/manager/app/src/main/java/me/weishu/kernelsu/Natives.java index 08ce8744..a8e8cfa4 100644 --- a/manager/app/src/main/java/me/weishu/kernelsu/Natives.java +++ b/manager/app/src/main/java/me/weishu/kernelsu/Natives.java @@ -11,7 +11,7 @@ public final class Natives { } // become root manager, return true if success. - public static native boolean becomeManager(); + public static native boolean becomeManager(String pkg); public static native int getVersion(); diff --git a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Home.kt b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Home.kt index 022f100b..d88cb23a 100644 --- a/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Home.kt +++ b/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Home.kt @@ -46,7 +46,7 @@ fun Home() { val secondaryText: String val kernelVersion = getKernelVersion() - val isManager = Natives.becomeManager() + val isManager = Natives.becomeManager(LocalContext.current.packageName) if (kernelVersion.isGKI()) { // GKI kernel