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

Commit 33c375ff authored by Wale Ogunwale's avatar Wale Ogunwale Committed by Android (Google) Code Review
Browse files

Merge "Lockdown AM.getRunningAppProcesses API with permission.REAL_GET_TASKS"

parents 0dce2acb 9dbaa54f
Loading
Loading
Loading
Loading
+13 −6
Original line number Original line Diff line number Diff line
@@ -7819,7 +7819,7 @@ public final class ActivityManagerService extends ActivityManagerNative
        }
        }
        if (!allowed) {
        if (!allowed) {
            Slog.w(TAG, caller + ": caller " + callingUid
            Slog.w(TAG, caller + ": caller " + callingUid
                    + " does not hold GET_TASKS; limiting output");
                    + " does not hold REAL_GET_TASKS; limiting output");
        }
        }
        return allowed;
        return allowed;
    }
    }
@@ -12040,16 +12040,23 @@ public final class ActivityManagerService extends ActivityManagerNative
    public List<ActivityManager.RunningAppProcessInfo> getRunningAppProcesses() {
    public List<ActivityManager.RunningAppProcessInfo> getRunningAppProcesses() {
        enforceNotIsolatedCaller("getRunningAppProcesses");
        enforceNotIsolatedCaller("getRunningAppProcesses");
        final int callingUid = Binder.getCallingUid();
        // Lazy instantiation of list
        // Lazy instantiation of list
        List<ActivityManager.RunningAppProcessInfo> runList = null;
        List<ActivityManager.RunningAppProcessInfo> runList = null;
        final boolean allUsers = ActivityManager.checkUidPermission(INTERACT_ACROSS_USERS_FULL,
        final boolean allUsers = ActivityManager.checkUidPermission(INTERACT_ACROSS_USERS_FULL,
                Binder.getCallingUid()) == PackageManager.PERMISSION_GRANTED;
                callingUid) == PackageManager.PERMISSION_GRANTED;
        int userId = UserHandle.getUserId(Binder.getCallingUid());
        final int userId = UserHandle.getUserId(callingUid);
        final boolean allUids = isGetTasksAllowed(
                "getRunningAppProcesses", Binder.getCallingPid(), callingUid);
        synchronized (this) {
        synchronized (this) {
            // Iterate across all processes
            // Iterate across all processes
            for (int i = mLruProcesses.size() - 1; i >= 0; i--) {
            for (int i = mLruProcesses.size() - 1; i >= 0; i--) {
                ProcessRecord app = mLruProcesses.get(i);
                ProcessRecord app = mLruProcesses.get(i);
                if (!allUsers && app.userId != userId) {
                if ((!allUsers && app.userId != userId)
                        || (!allUids && app.uid != callingUid)) {
                    continue;
                    continue;
                }
                }
                if ((app.thread != null) && (!app.crashing && !app.notResponding)) {
                if ((app.thread != null) && (!app.crashing && !app.notResponding)) {
@@ -12073,7 +12080,7 @@ public final class ActivityManagerService extends ActivityManagerNative
                    //Slog.v(TAG, "Proc " + app.processName + ": imp=" + currApp.importance
                    //Slog.v(TAG, "Proc " + app.processName + ": imp=" + currApp.importance
                    //        + " lru=" + currApp.lru);
                    //        + " lru=" + currApp.lru);
                    if (runList == null) {
                    if (runList == null) {
                        runList = new ArrayList<ActivityManager.RunningAppProcessInfo>();
                        runList = new ArrayList<>();
                    }
                    }
                    runList.add(currApp);
                    runList.add(currApp);
                }
                }