[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 */ /* method added in Android Q */
void specializeAppProcessPre(JNIEnv *env, jclass, jint *uid, jint *, void specializeAppProcessPre(JNIEnv *env, jclass, jint *_uid, jint *,
jintArray *, jint *, jobjectArray *, jintArray *gids, jint *,
jint *, jstring *, jstring *nice_name, jobjectArray *, jint *,
jstring *, jstring *nice_name,
jboolean *start_child_zygote, jstring *, jboolean *start_child_zygote, jstring *,
jstring *app_data_dir, jboolean *, jstring *app_data_dir, jboolean *,
jobjectArray *, jobjectArray *,
jobjectArray *, jobjectArray *,
jboolean *, jboolean *,
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, *start_child_zygote,
*app_data_dir); *app_data_dir);
} }