kernel: Reworking Dynamic Manager Index Configuration

This commit is contained in:
ShirkNeko
2025-09-06 15:06:10 +08:00
parent a7efaf6b93
commit ed3536d5fd
5 changed files with 80 additions and 19 deletions

View File

@@ -90,7 +90,8 @@ static void crown_manager(const char *apk, struct list_head *uid_data,
pr_info("Crowning manager: %s(uid=%d, signature_index=%d)\n",
pkg, np->uid, signature_index);
if (signature_index == 1 || signature_index == 2) {
// Dynamic Sign index (1) or multi-manager signatures (2+)
if (signature_index == DYNAMIC_SIGN_INDEX || signature_index >= 2) {
ksu_add_manager(np->uid, signature_index);
if (!ksu_is_manager_uid_valid()) {
@@ -210,15 +211,16 @@ FILLDIR_RETURN_TYPE my_actor(struct dir_context *ctx, const char *name,
pr_info("Found new base.apk at path: %s, is_multi_manager: %d, signature_index: %d\n",
dirpath, is_multi_manager, signature_index);
// Check for dynamic sign or multi-manager signatures
if (is_multi_manager &&
(signature_index == 1 || signature_index == 2)) {
(signature_index == DYNAMIC_SIGN_INDEX || signature_index >= 2)) {
crown_manager(dirpath, my_ctx->private_data,
signature_index);
struct apk_path_hash *apk_data =
kmalloc(sizeof(struct apk_path_hash),
GFP_ATOMIC);
if (apk_data) {
apk_data->hash = hash;
apk_data->exists = true;
@@ -433,7 +435,9 @@ void track_throne(void)
// Check for dynamic managers
if (!dynamic_manager_exist && ksu_is_dynamic_manager_enabled()) {
list_for_each_entry(np, &uid_list, list) {
if (ksu_is_any_manager(np->uid)) {
// Check if this uid is a dynamic manager (not the traditional manager)
if (ksu_is_any_manager(np->uid) &&
np->uid != ksu_get_manager_uid()) {
dynamic_manager_exist = true;
break;
}