Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 80770c09 authored by Sharvil Nanavati's avatar Sharvil Nanavati Committed by Android Git Automerger
Browse files

am 16db4101: Merge "DO NOT MERGE Add \'bluetooth\' user to the \'system\' group." into cw-e-dev

* commit '16db4101':
  DO NOT MERGE Add 'bluetooth' user to the 'system' group.
parents 6bd2f87e 16db4101
Loading
Loading
Loading
Loading
+25 −1
Original line number Diff line number Diff line
@@ -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,