From 2d9d91bab31f899b6f993c05857788ef266c59b8 Mon Sep 17 00:00:00 2001 From: Wang Han Date: Sat, 18 Sep 2021 16:53:14 +0800 Subject: [PATCH] [core] Set GID in specializeAppProcessPre() as well (#1133) * USAP case. --- core/src/main/cpp/main/src/main.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/core/src/main/cpp/main/src/main.cpp b/core/src/main/cpp/main/src/main.cpp index 34f8b765..07cc3c4f 100644 --- a/core/src/main/cpp/main/src/main.cpp +++ b/core/src/main/cpp/main/src/main.cpp @@ -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(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); }