manager: Fix groups overflow, close #598
This commit is contained in:
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user