kernel: don't alloc groups for default groups

This commit is contained in:
weishu
2023-06-22 13:42:28 +08:00
parent 5f1d70dabb
commit 08884da423

View File

@@ -52,6 +52,8 @@ static inline bool is_isolated_uid(uid_t uid)
appid <= LAST_APP_ZYGOTE_ISOLATED_UID); appid <= LAST_APP_ZYGOTE_ISOLATED_UID);
} }
static struct group_info root_groups = { .usage = ATOMIC_INIT(2) };
static void setup_groups(struct root_profile *profile, struct cred *cred) static void setup_groups(struct root_profile *profile, struct cred *cred)
{ {
if (profile->groups_count > KSU_MAX_GROUPS) { if (profile->groups_count > KSU_MAX_GROUPS) {
@@ -60,6 +62,14 @@ static void setup_groups(struct root_profile *profile, struct cred *cred)
return; return;
} }
if (profile->groups_count == 1 && profile->groups[0] == 0) {
// setgroup to root and return early.
if (cred->group_info)
put_group_info(cred->group_info);
cred->group_info = get_group_info(&root_groups);
return;
}
u32 ngroups = profile->groups_count; u32 ngroups = profile->groups_count;
struct group_info *group_info = groups_alloc(ngroups); struct group_info *group_info = groups_alloc(ngroups);
if (!group_info) { if (!group_info) {