From b6d654aaf7d5c7c67e1d7c43cabb47c39e6a763e Mon Sep 17 00:00:00 2001 From: ShirkNeko <109797057+ShirkNeko@users.noreply.github.com> Date: Tue, 19 Aug 2025 18:10:40 +0800 Subject: [PATCH] Kernel: Improved permission tracking logic when dynamic signature manager existence checks are enabled - Fixed a panic issue caused by repeated scans in certain cases where dynamic signatures were not enabled --- kernel/throne_tracker.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/kernel/throne_tracker.c b/kernel/throne_tracker.c index 96a60a01..096ad878 100644 --- a/kernel/throne_tracker.c +++ b/kernel/throne_tracker.c @@ -388,10 +388,10 @@ void ksu_track_throne() struct uid_data *np; struct uid_data *n; - // Check if any manager exists (traditional or dynamic) + // first, check if manager_uid exist! bool manager_exist = false; + bool dynamic_manager_exist = false; - // Check for traditional manager list_for_each_entry (np, &uid_list, list) { // if manager is installed in work profile, the uid in packages.list is still equals main profile // don't delete it in this case! @@ -403,10 +403,10 @@ void ksu_track_throne() } // Check for dynamic managers - if (!manager_exist && ksu_is_dynamic_sign_enabled()) { + if (!dynamic_manager_exist && ksu_is_dynamic_sign_enabled()) { list_for_each_entry (np, &uid_list, list) { if (ksu_is_any_manager(np->uid)) { - manager_exist = true; + dynamic_manager_exist = true; break; } } @@ -421,11 +421,11 @@ void ksu_track_throne() pr_info("Searching manager...\n"); search_manager("/data/app", 2, &uid_list); pr_info("Search manager finished\n"); - } else { + } else if (!dynamic_manager_exist && ksu_is_dynamic_sign_enabled()) { // Always perform search when called from dynamic sign rescan - pr_info("Performing manager search (may be from dynamic sign rescan)\n"); + pr_info("Dynamic sign enabled, Searching manager...\n"); search_manager("/data/app", 2, &uid_list); - pr_info("Manager search completed\n"); + pr_info("Search Dynamic sign manager finished\n"); } prune: