kernel: Fixed an issue where scanning could cause the application to freeze.
This commit is contained in:
@@ -652,32 +652,24 @@ static void track_throne_function(void)
|
|||||||
if (ksu_is_manager_uid_valid()) {
|
if (ksu_is_manager_uid_valid()) {
|
||||||
pr_info("manager is uninstalled, invalidate it!\n");
|
pr_info("manager is uninstalled, invalidate it!\n");
|
||||||
ksu_invalidate_manager_uid();
|
ksu_invalidate_manager_uid();
|
||||||
|
goto prune;
|
||||||
}
|
}
|
||||||
pr_info("Searching manager...\n");
|
pr_info("Searching manager...\n");
|
||||||
search_manager("/data/app", 2, &uid_list);
|
search_manager("/data/app", 2, &uid_list);
|
||||||
pr_info("Search manager finished\n");
|
pr_info("Search manager finished\n");
|
||||||
goto prune;
|
// Always perform search when called from dynamic manager rescan
|
||||||
}
|
} else if (!dynamic_manager_exist && ksu_is_dynamic_manager_enabled()) {
|
||||||
|
|
||||||
// Always perform search when called from dynamic manager rescan
|
|
||||||
if (ksu_is_dynamic_manager_enabled() && !dynamic_manager_exist) {
|
|
||||||
pr_info("Dynamic sign enabled, Searching manager...\n");
|
pr_info("Dynamic sign enabled, Searching manager...\n");
|
||||||
search_manager("/data/app", 2, &uid_list);
|
search_manager("/data/app", 2, &uid_list);
|
||||||
pr_info("Search Dynamic sign manager finished\n");
|
pr_info("Search Dynamic sign manager finished\n");
|
||||||
}
|
}
|
||||||
// If traditional manager exists but no dynamic manager instances found, do a full search
|
|
||||||
if (manager_exist && ksu_is_dynamic_manager_enabled() && !dynamic_manager_exist) {
|
|
||||||
pr_info("Searching manager...\n");
|
|
||||||
search_manager("/data/app", 2, &uid_list);
|
|
||||||
pr_info("Search manager finished\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
prune:
|
prune:
|
||||||
// then prune the allowlist
|
// then prune the allowlist
|
||||||
ksu_prune_allowlist(is_uid_exist, &uid_list);
|
ksu_prune_allowlist(is_uid_exist, &uid_list);
|
||||||
out:
|
out:
|
||||||
// free uid_list
|
// free uid_list
|
||||||
list_for_each_entry_safe (np, n, &uid_list, list) {
|
list_for_each_entry_safe(np, n, &uid_list, list) {
|
||||||
list_del(&np->list);
|
list_del(&np->list);
|
||||||
kfree(np);
|
kfree(np);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user