Skip to content
This repository was archived by the owner on Feb 12, 2026. It is now read-only.
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 29 additions & 20 deletions daemon/src/main/jni/denylist.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -397,6 +397,29 @@ bool apatch_uid_should_umount(const char *const process) {
return false;
}

int get_stat(const char* app_name, struct stat* st) {
// ignore sandbox package
if (strcmp("com.android.sdksandbox", app_name) == 0 ||
strcmp("com.google.android.sdksandbox", app_name) == 0) {
return -1;
}

char app_data_dir[PATH_MAX];
snprintf(app_data_dir, sizeof(app_data_dir), "/data/data/%s", app_name);

if (stat(app_data_dir, st) == -1) {
snprintf(app_data_dir, sizeof(app_data_dir), "/data/user_de/0/%s", app_name);

if (stat(app_data_dir, st) == -1) {
PLOGE("Failed to stat /data/data/%s and /data/user_de/0/%s", app_name, app_name);

return -1;
}
}

return 0;
}

extern "C" JNIEXPORT jboolean JNICALL
Java_org_lsposed_lspd_service_DenylistManager_isInDenylist(JNIEnv *env, jclass, jstring appName) {
const char *app_name = env->GetStringUTFChars(appName, nullptr);
Expand All @@ -406,23 +429,16 @@ Java_org_lsposed_lspd_service_DenylistManager_isInDenylist(JNIEnv *env, jclass,
return JNI_FALSE;
}

char app_data_dir[PATH_MAX];
snprintf(app_data_dir, sizeof(app_data_dir), "/data/data/%s", app_name);

struct stat st;
if (stat(app_data_dir, &st) == -1) {
PLOGE("Failed to stat %s", app_data_dir);

goto app_not_in_denylist;
}

if (root_impl == -1 && !ksu_get_existence() && !magisk_get_existence() && !apatch_get_existence()) {
LOGE("No supported root implementation found, skipping denylist check");

goto app_not_in_denylist;
}

if (root_impl == 1) {
struct stat st;
if (get_stat(app_name, &st) == -1) goto app_not_in_denylist;

if (ksu_is_in_denylist(st.st_uid)) {
LOGI("App %s is in KernelSU denylist", app_name);

Expand Down Expand Up @@ -486,23 +502,16 @@ Java_org_lsposed_lspd_service_DenylistManager_isInDenylistFromClasspathDir(JNIEn
}
env->ReleaseStringUTFChars(classpathDirArg, classpath_dir_arg);

char app_data_dir[1024] = {0};
snprintf(app_data_dir, sizeof(app_data_dir), "/data/data/%s", app_name);

struct stat st;
if (stat(app_data_dir, &st) == -1) {
PLOGE("Failed to stat %s", app_data_dir);

goto app_not_in_denylist;
}

if (root_impl == -1 && !ksu_get_existence() && !magisk_get_existence() && !apatch_get_existence()) {
LOGE("No supported root implementation found, skipping denylist check");

goto app_not_in_denylist;
}

if (root_impl == 1) {
struct stat st;
if (get_stat(app_name, &st) == -1) goto app_not_in_denylist;

if (ksu_is_in_denylist(st.st_uid)) {
LOGI("App %s is in KernelSU denylist", app_name);

Expand Down