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

Commit b2a5a82d authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[audio] Add native uids to permission provider" into main

parents b221161a 48f71cce
Loading
Loading
Loading
Loading
+20 −1
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import static android.Manifest.permission.WRITE_SECURE_SETTINGS;
import android.annotation.Nullable;
import android.os.RemoteException;
import android.os.Trace;
import android.os.Process;
import android.os.UserHandle;
import android.util.ArraySet;
import android.util.IntArray;
@@ -70,6 +71,13 @@ public class AudioServerPermissionProvider {
    static final byte[] HDS_PERMS = new byte[] {PermissionEnum.CAPTURE_AUDIO_HOTWORD,
            PermissionEnum.CAPTURE_AUDIO_OUTPUT, PermissionEnum.RECORD_AUDIO};

    // Some non-package uids are statically assigned permissions. Since these uids don't show up as
    // installed packages (as they correspond to native services), explicitly enumerate them.
    // (see frameworks/base/data/etc/platform.xml)
    // Note, we exclude system (1000) and AID_AUDIOSERVER (1041), as the permission model grants
    // them all audio permissions
    static final int[] NONPACKAGE_UIDS = new int[] { Process.MEDIA_UID, Process.CAMERASERVER_UID, };

    static {
        MONITORED_PERMS[PermissionEnum.RECORD_AUDIO] = RECORD_AUDIO;
        MONITORED_PERMS[PermissionEnum.MODIFY_AUDIO_ROUTING] = MODIFY_AUDIO_ROUTING;
@@ -327,8 +335,19 @@ public class AudioServerPermissionProvider {
    /** Return all uids (not app-ids) which currently hold a given permission. Not app-op aware */
    private int[] getUidsHoldingPerm(int perm) {
        IntArray acc = new IntArray();
        for (int userId : mUserIdSupplier.get()) {
        final IntArray appIds = new IntArray(mPackageMap.size() + NONPACKAGE_UIDS.length);
        for (int appId : NONPACKAGE_UIDS) {
            if (!mPackageMap.containsKey(appId)) {
                appIds.add(appId);
            }
        }
        for (int appId : mPackageMap.keySet()) {
            appIds.add(appId);
        }

        for (int userId : mUserIdSupplier.get()) {
            for (int i = 0; i < appIds.size(); i++) {
                int appId = appIds.get(i);
                int uid = UserHandle.getUid(userId, appId);
                if (mPermissionPredicate.test(uid, MONITORED_PERMS[perm])) {
                    acc.add(uid);