diff options
| author | 2015-09-03 21:02:43 +0000 | |
|---|---|---|
| committer | 2015-09-03 21:02:43 +0000 | |
| commit | 16db4101829c7beee42a09fcaf87fa4e31bc1d5a (patch) | |
| tree | 503e12d7aa712a3ad9ec6df5b905beb2293dc936 | |
| parent | bd2ad550c5a7c7b7efbe3510f212322fb173b06c (diff) | |
| parent | babe81546ef001ae26a5c4b572f1480ba737ae32 (diff) | |
Merge "DO NOT MERGE Add 'bluetooth' user to the 'system' group." into cw-e-dev
| -rw-r--r-- | core/jni/com_android_internal_os_Zygote.cpp | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/core/jni/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp index b431a3f487fa..1d1685aa258c 100644 --- a/core/jni/com_android_internal_os_Zygote.cpp +++ b/core/jni/com_android_internal_os_Zygote.cpp @@ -611,10 +611,34 @@ static jint com_android_internal_os_Zygote_nativeForkAndSpecialize( jint debug_flags, jobjectArray rlimits, jint mount_external, jstring se_info, jstring se_name, jintArray fdsToClose, jstring instructionSet, jstring appDataDir) { - // Grant CAP_WAKE_ALARM to the Bluetooth process. jlong capabilities = 0; if (uid == AID_BLUETOOTH) { + // Grant CAP_WAKE_ALARM and CAP_BLOCK_SUSPEND to the Bluetooth process. capabilities |= (1LL << CAP_WAKE_ALARM); + capabilities |= (1LL << CAP_BLOCK_SUSPEND); + + // Add the Bluetooth process to the system group. + jsize length = env->GetArrayLength(reinterpret_cast<jarray>(gids)); + jintArray gids_with_system = env->NewIntArray(length + 1); + if (!gids_with_system) { + ALOGE("could not allocate java array for gids"); + RuntimeAbort(env); + } + + jint *gids_elements = env->GetIntArrayElements(gids, NULL); + jint *gids_with_system_elements = env->GetIntArrayElements(gids_with_system, NULL); + + if (!gids_elements || !gids_with_system_elements) { + ALOGE("could not allocate arrays for gids"); + RuntimeAbort(env); + } + + gids_with_system_elements[0] = AID_SYSTEM; + memcpy(&gids_with_system_elements[1], &gids_elements[0], length * sizeof(jint)); + + env->ReleaseIntArrayElements(gids, gids_elements, JNI_ABORT); + env->ReleaseIntArrayElements(gids_with_system, gids_with_system_elements, 0); + gids = gids_with_system; } return ForkAndSpecializeCommon(env, uid, gid, gids, debug_flags, |