[core] Set GID in specializeAppProcessPre() as well (#1133)

* USAP case.
This commit is contained in:
Wang Han 2021-09-18 16:53:14 +08:00 committed by GitHub
parent f453c6cf10
commit 2d9d91bab3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 16 additions and 4 deletions

View File

@ -92,16 +92,28 @@ namespace lspd {
}
/* method added in Android Q */
void specializeAppProcessPre(JNIEnv *env, jclass, jint *uid, jint *,
jintArray *, jint *, jobjectArray *,
jint *, jstring *, jstring *nice_name,
void specializeAppProcessPre(JNIEnv *env, jclass, jint *_uid, jint *,
jintArray *gids, jint *,
jobjectArray *, jint *,
jstring *, jstring *nice_name,
jboolean *start_child_zygote, jstring *,
jstring *app_data_dir, jboolean *,
jobjectArray *,
jobjectArray *,
jboolean *,
jboolean *) {
Context::GetInstance()->OnNativeForkAndSpecializePre(env, *uid, *nice_name,
if (*_uid == kAidShell) {
int array_size = *gids ? env->GetArrayLength(*gids) : 0;
auto region = std::make_unique<jint[]>(array_size + 1);
auto *new_gids = env->NewIntArray(array_size + 1);
if (*gids) env->GetIntArrayRegion(*gids, 0, array_size, region.get());
region.get()[array_size] = kAidInet;
env->SetIntArrayRegion(new_gids, 0, array_size + 1, region.get());
if (*gids) env->SetIntArrayRegion(*gids, 0, 1, region.get() + array_size);
*gids = new_gids;
}
Context::GetInstance()->OnNativeForkAndSpecializePre(env, *_uid,
*nice_name,
*start_child_zygote,
*app_data_dir);
}