From e9011041c536011317f33bb68ea9060f26a7c0a6 Mon Sep 17 00:00:00 2001 From: weishu Date: Tue, 6 Jun 2023 12:39:29 +0800 Subject: [PATCH] manager: Fix groups overflow, close #598 --- manager/app/src/main/cpp/jni.cc | 14 +++++++++++--- .../ui/component/profile/RootProfileConfig.kt | 4 +--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/manager/app/src/main/cpp/jni.cc b/manager/app/src/main/cpp/jni.cc index 1e8dfccc..ce91c5dd 100644 --- a/manager/app/src/main/cpp/jni.cc +++ b/manager/app/src/main/cpp/jni.cc @@ -157,7 +157,7 @@ Java_me_weishu_kernelsu_Natives_getAppProfile(JNIEnv *env, jobject, jstring pkg, env->SetBooleanField(obj, nonRootUseDefaultField, true); jobject capList = env->GetObjectField(obj, capabilitiesField); - int DEFAULT_CAPS[] = {CAP_DAC_READ_SEARCH }; + int DEFAULT_CAPS[] = {CAP_DAC_READ_SEARCH}; for (auto i: DEFAULT_CAPS) { addIntToList(env, capList, i); @@ -179,8 +179,12 @@ Java_me_weishu_kernelsu_Natives_getAppProfile(JNIEnv *env, jobject, jstring pkg, env->SetIntField(obj, gidField, profile.rp_config.profile.gid); jobject groupList = env->GetObjectField(obj, groupsField); - fillIntArray(env, groupList, profile.rp_config.profile.groups, - profile.rp_config.profile.groups_count); + int groupCount = profile.rp_config.profile.groups_count; + if (groupCount > KSU_MAX_GROUPS) { + LOGD("kernel group count too large: %d???", groupCount); + groupCount = KSU_MAX_GROUPS; + } + fillIntArray(env, groupList, profile.rp_config.profile.groups, groupCount); jobject capList = env->GetObjectField(obj, capabilitiesField); for (int i = 0; i <= CAP_LAST_CAP; i++) { @@ -267,6 +271,10 @@ Java_me_weishu_kernelsu_Natives_setAppProfile(JNIEnv *env, jobject clazz, jobjec p.rp_config.profile.gid = gid; int groups_count = getListSize(env, groups); + if (groups_count > KSU_MAX_GROUPS) { + LOGD("groups count too large: %d", groups_count); + return false; + } p.rp_config.profile.groups_count = groups_count; fillArrayWithList(env, groups, p.rp_config.profile.groups, groups_count); diff --git a/manager/app/src/main/java/me/weishu/kernelsu/ui/component/profile/RootProfileConfig.kt b/manager/app/src/main/java/me/weishu/kernelsu/ui/component/profile/RootProfileConfig.kt index 5e1ff4f3..f4c3861a 100644 --- a/manager/app/src/main/java/me/weishu/kernelsu/ui/component/profile/RootProfileConfig.kt +++ b/manager/app/src/main/java/me/weishu/kernelsu/ui/component/profile/RootProfileConfig.kt @@ -2,9 +2,7 @@ package me.weishu.kernelsu.ui.component.profile -import android.util.Log import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.ExperimentalLayoutApi import androidx.compose.foundation.layout.FlowRow @@ -17,7 +15,6 @@ import androidx.compose.material.icons.filled.ArrowDropDown import androidx.compose.material.icons.filled.ArrowDropUp import androidx.compose.material3.AssistChip import androidx.compose.material3.DropdownMenuItem -import androidx.compose.material3.ElevatedCard import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExposedDropdownMenuBox import androidx.compose.material3.Icon @@ -204,6 +201,7 @@ fun GroupsPanel(selected: List, closeSelection: (selection: Set) selection = ListSelection.Multiple( showCheckBoxes = true, options = options, + maxChoices = 32, // Kernel only supports 32 groups at most ) { indecies, _ -> // Handle selection selection.clear()