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

Commit a5e6a9ed authored by Matt Buckley's avatar Matt Buckley Committed by Automerger Merge Worker
Browse files

Merge "Change "checkTidValid" to only call into AM if necessary" into udc-dev...

Merge "Change "checkTidValid" to only call into AM if necessary" into udc-dev am: f735be31 am: ddf08e7d

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/22382655



Change-Id: I74967e15fdd315a28b66c0cf71367bfecad7ab1f
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 693377c3 ddf08e7d
Loading
Loading
Loading
Loading
+16 −12
Original line number Diff line number Diff line
@@ -48,7 +48,6 @@ import com.android.server.utils.Slogf;

import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
@@ -324,16 +323,7 @@ public final class HintManagerService extends SystemService {
    private boolean checkTidValid(int uid, int tgid, int [] tids) {
        // Make sure all tids belongs to the same UID (including isolated UID),
        // tids can belong to different application processes.
        List<Integer> eligiblePids = null;
        // To avoid deadlock, do not call into AMS if the call is from system.
        if (uid != Process.SYSTEM_UID) {
            eligiblePids = mAmInternal.getIsolatedProcesses(uid);
        }
        if (eligiblePids == null) {
            eligiblePids = new ArrayList<>();
        }
        eligiblePids.add(tgid);

        List<Integer> isolatedPids = null;
        for (int threadId : tids) {
            final String[] procStatusKeys = new String[] {
                    "Uid:",
@@ -345,7 +335,21 @@ public final class HintManagerService extends SystemService {
            int pidOfThreadId = (int) output[1];

            // use PID check for isolated processes, use UID check for non-isolated processes.
            if (eligiblePids.contains(pidOfThreadId) || uidOfThreadId == uid) {
            if (pidOfThreadId == tgid || uidOfThreadId == uid) {
                continue;
            }
            // Only call into AM if the tid is either isolated or invalid
            if (isolatedPids == null) {
                // To avoid deadlock, do not call into AMS if the call is from system.
                if (uid == Process.SYSTEM_UID) {
                    return false;
                }
                isolatedPids = mAmInternal.getIsolatedProcesses(uid);
                if (isolatedPids == null) {
                    return false;
                }
            }
            if (isolatedPids.contains(pidOfThreadId)) {
                continue;
            }
            return false;