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

Commit f715e0fd authored by Amith Yamasani's avatar Amith Yamasani Committed by The Android Automerger
Browse files

Make dumpsys activity services work again.

Due to the step to query the users, dumpsys was crashing when run
as non-root. Clearing the calling identity after checking perms
fixes this.

Bug: 6311443
Change-Id: I0b0bca5c7305cea19adc772b3bfec34c16bb24c4
parent 4e230352
Loading
Loading
Loading
Loading
+11 −14
Original line number Original line Diff line number Diff line
@@ -8353,6 +8353,8 @@ public final class ActivityManagerService extends ActivityManagerNative
            }
            }
        }
        }
        long origId = Binder.clearCallingIdentity();
        boolean more = false;
        // Is the caller requesting to dump a particular piece of data?
        // Is the caller requesting to dump a particular piece of data?
        if (opti < args.length) {
        if (opti < args.length) {
            String cmd = args[opti];
            String cmd = args[opti];
@@ -8361,7 +8363,6 @@ public final class ActivityManagerService extends ActivityManagerNative
                synchronized (this) {
                synchronized (this) {
                    dumpActivitiesLocked(fd, pw, args, opti, true, dumpClient, null);
                    dumpActivitiesLocked(fd, pw, args, opti, true, dumpClient, null);
                }
                }
                return;
            } else if ("broadcasts".equals(cmd) || "b".equals(cmd)) {
            } else if ("broadcasts".equals(cmd) || "b".equals(cmd)) {
                String[] newArgs;
                String[] newArgs;
                String name;
                String name;
@@ -8378,7 +8379,6 @@ public final class ActivityManagerService extends ActivityManagerNative
                synchronized (this) {
                synchronized (this) {
                    dumpBroadcastsLocked(fd, pw, args, opti, true, name);
                    dumpBroadcastsLocked(fd, pw, args, opti, true, name);
                }
                }
                return;
            } else if ("intents".equals(cmd) || "i".equals(cmd)) {
            } else if ("intents".equals(cmd) || "i".equals(cmd)) {
                String[] newArgs;
                String[] newArgs;
                String name;
                String name;
@@ -8395,7 +8395,6 @@ public final class ActivityManagerService extends ActivityManagerNative
                synchronized (this) {
                synchronized (this) {
                    dumpPendingIntentsLocked(fd, pw, args, opti, true, name);
                    dumpPendingIntentsLocked(fd, pw, args, opti, true, name);
                }
                }
                return;
            } else if ("processes".equals(cmd) || "p".equals(cmd)) {
            } else if ("processes".equals(cmd) || "p".equals(cmd)) {
                String[] newArgs;
                String[] newArgs;
                String name;
                String name;
@@ -8412,12 +8411,10 @@ public final class ActivityManagerService extends ActivityManagerNative
                synchronized (this) {
                synchronized (this) {
                    dumpProcessesLocked(fd, pw, args, opti, true, name);
                    dumpProcessesLocked(fd, pw, args, opti, true, name);
                }
                }
                return;
            } else if ("oom".equals(cmd) || "o".equals(cmd)) {
            } else if ("oom".equals(cmd) || "o".equals(cmd)) {
                synchronized (this) {
                synchronized (this) {
                    dumpOomLocked(fd, pw, args, opti, true);
                    dumpOomLocked(fd, pw, args, opti, true);
                }
                }
                return;
            } else if ("provider".equals(cmd)) {
            } else if ("provider".equals(cmd)) {
                String[] newArgs;
                String[] newArgs;
                String name;
                String name;
@@ -8434,12 +8431,10 @@ public final class ActivityManagerService extends ActivityManagerNative
                    pw.println("No providers match: " + name);
                    pw.println("No providers match: " + name);
                    pw.println("Use -h for help.");
                    pw.println("Use -h for help.");
                }
                }
                return;
            } else if ("providers".equals(cmd) || "prov".equals(cmd)) {
            } else if ("providers".equals(cmd) || "prov".equals(cmd)) {
                synchronized (this) {
                synchronized (this) {
                    dumpProvidersLocked(fd, pw, args, opti, true, null);
                    dumpProvidersLocked(fd, pw, args, opti, true, null);
                }
                }
                return;
            } else if ("service".equals(cmd)) {
            } else if ("service".equals(cmd)) {
                String[] newArgs;
                String[] newArgs;
                String name;
                String name;
@@ -8457,13 +8452,11 @@ public final class ActivityManagerService extends ActivityManagerNative
                    pw.println("No services match: " + name);
                    pw.println("No services match: " + name);
                    pw.println("Use -h for help.");
                    pw.println("Use -h for help.");
                }
                }
                return;
            } else if ("package".equals(cmd)) {
            } else if ("package".equals(cmd)) {
                String[] newArgs;
                String[] newArgs;
                if (opti >= args.length) {
                if (opti >= args.length) {
                    pw.println("package: no package name specified");
                    pw.println("package: no package name specified");
                    pw.println("Use -h for help.");
                    pw.println("Use -h for help.");
                    return;
                } else {
                } else {
                    dumpPackage = args[opti];
                    dumpPackage = args[opti];
                    opti++;
                    opti++;
@@ -8472,18 +8465,21 @@ public final class ActivityManagerService extends ActivityManagerNative
                            args.length - opti);
                            args.length - opti);
                    args = newArgs;
                    args = newArgs;
                    opti = 0;
                    opti = 0;
                    more = true;
                }
                }
            } else if ("services".equals(cmd) || "s".equals(cmd)) {
            } else if ("services".equals(cmd) || "s".equals(cmd)) {
                synchronized (this) {
                synchronized (this) {
                    dumpServicesLocked(fd, pw, args, opti, true, dumpClient, null);
                    dumpServicesLocked(fd, pw, args, opti, true, dumpClient, null);
                }
                }
                return;
            } else {
            } else {
                // Dumping a single activity?
                // Dumping a single activity?
                if (!dumpActivity(fd, pw, cmd, args, opti, dumpAll)) {
                if (!dumpActivity(fd, pw, cmd, args, opti, dumpAll)) {
                    pw.println("Bad activity command, or no activities match: " + cmd);
                    pw.println("Bad activity command, or no activities match: " + cmd);
                    pw.println("Use -h for help.");
                    pw.println("Use -h for help.");
                }
                }
            }
            if (!more) {
                Binder.restoreCallingIdentity(origId);
                return;
                return;
            }
            }
        }
        }
@@ -8528,6 +8524,7 @@ public final class ActivityManagerService extends ActivityManagerNative
            }
            }
            dumpProcessesLocked(fd, pw, args, opti, dumpAll, dumpPackage);
            dumpProcessesLocked(fd, pw, args, opti, dumpAll, dumpPackage);
        }
        }
        Binder.restoreCallingIdentity(origId);
    }
    }
    boolean dumpActivitiesLocked(FileDescriptor fd, PrintWriter pw, String[] args,
    boolean dumpActivitiesLocked(FileDescriptor fd, PrintWriter pw, String[] args,