manager: Fix groups overflow, close #598

This commit is contained in:
weishu
2023-06-06 12:39:29 +08:00
parent 9803371fdb
commit e9011041c5
2 changed files with 12 additions and 6 deletions

View File

@@ -157,7 +157,7 @@ Java_me_weishu_kernelsu_Natives_getAppProfile(JNIEnv *env, jobject, jstring pkg,
env->SetBooleanField(obj, nonRootUseDefaultField, true); env->SetBooleanField(obj, nonRootUseDefaultField, true);
jobject capList = env->GetObjectField(obj, capabilitiesField); 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) { for (auto i: DEFAULT_CAPS) {
addIntToList(env, capList, i); 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); env->SetIntField(obj, gidField, profile.rp_config.profile.gid);
jobject groupList = env->GetObjectField(obj, groupsField); jobject groupList = env->GetObjectField(obj, groupsField);
fillIntArray(env, groupList, profile.rp_config.profile.groups, int groupCount = profile.rp_config.profile.groups_count;
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); jobject capList = env->GetObjectField(obj, capabilitiesField);
for (int i = 0; i <= CAP_LAST_CAP; i++) { 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; p.rp_config.profile.gid = gid;
int groups_count = getListSize(env, groups); 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; p.rp_config.profile.groups_count = groups_count;
fillArrayWithList(env, groups, p.rp_config.profile.groups, groups_count); fillArrayWithList(env, groups, p.rp_config.profile.groups, groups_count);

View File

@@ -2,9 +2,7 @@
package me.weishu.kernelsu.ui.component.profile package me.weishu.kernelsu.ui.component.profile
import android.util.Log
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ExperimentalLayoutApi import androidx.compose.foundation.layout.ExperimentalLayoutApi
import androidx.compose.foundation.layout.FlowRow 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.material.icons.filled.ArrowDropUp
import androidx.compose.material3.AssistChip import androidx.compose.material3.AssistChip
import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.ElevatedCard
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExposedDropdownMenuBox import androidx.compose.material3.ExposedDropdownMenuBox
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
@@ -204,6 +201,7 @@ fun GroupsPanel(selected: List<Groups>, closeSelection: (selection: Set<Groups>)
selection = ListSelection.Multiple( selection = ListSelection.Multiple(
showCheckBoxes = true, showCheckBoxes = true,
options = options, options = options,
maxChoices = 32, // Kernel only supports 32 groups at most
) { indecies, _ -> ) { indecies, _ ->
// Handle selection // Handle selection
selection.clear() selection.clear()