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

Commit 7463adac authored by Amith Yamasani's avatar Amith Yamasani
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 30ff5aec
Loading
Loading
Loading
Loading
+11 −14
Original line number 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?
        if (opti < args.length) {
            String cmd = args[opti];
@@ -8361,7 +8363,6 @@ public final class ActivityManagerService extends ActivityManagerNative
                synchronized (this) {
                    dumpActivitiesLocked(fd, pw, args, opti, true, dumpClient, null);
                }
                return;
            } else if ("broadcasts".equals(cmd) || "b".equals(cmd)) {
                String[] newArgs;
                String name;
@@ -8378,7 +8379,6 @@ public final class ActivityManagerService extends ActivityManagerNative
                synchronized (this) {
                    dumpBroadcastsLocked(fd, pw, args, opti, true, name);
                }
                return;
            } else if ("intents".equals(cmd) || "i".equals(cmd)) {
                String[] newArgs;
                String name;
@@ -8395,7 +8395,6 @@ public final class ActivityManagerService extends ActivityManagerNative
                synchronized (this) {
                    dumpPendingIntentsLocked(fd, pw, args, opti, true, name);
                }
                return;
            } else if ("processes".equals(cmd) || "p".equals(cmd)) {
                String[] newArgs;
                String name;
@@ -8412,12 +8411,10 @@ public final class ActivityManagerService extends ActivityManagerNative
                synchronized (this) {
                    dumpProcessesLocked(fd, pw, args, opti, true, name);
                }
                return;
            } else if ("oom".equals(cmd) || "o".equals(cmd)) {
                synchronized (this) {
                    dumpOomLocked(fd, pw, args, opti, true);
                }
                return;
            } else if ("provider".equals(cmd)) {
                String[] newArgs;
                String name;
@@ -8434,12 +8431,10 @@ public final class ActivityManagerService extends ActivityManagerNative
                    pw.println("No providers match: " + name);
                    pw.println("Use -h for help.");
                }
                return;
            } else if ("providers".equals(cmd) || "prov".equals(cmd)) {
                synchronized (this) {
                    dumpProvidersLocked(fd, pw, args, opti, true, null);
                }
                return;
            } else if ("service".equals(cmd)) {
                String[] newArgs;
                String name;
@@ -8457,13 +8452,11 @@ public final class ActivityManagerService extends ActivityManagerNative
                    pw.println("No services match: " + name);
                    pw.println("Use -h for help.");
                }
                return;
            } else if ("package".equals(cmd)) {
                String[] newArgs;
                if (opti >= args.length) {
                    pw.println("package: no package name specified");
                    pw.println("Use -h for help.");
                    return;
                } else {
                    dumpPackage = args[opti];
                    opti++;
@@ -8472,18 +8465,21 @@ public final class ActivityManagerService extends ActivityManagerNative
                            args.length - opti);
                    args = newArgs;
                    opti = 0;
                    more = true;
                }
            } else if ("services".equals(cmd) || "s".equals(cmd)) {
                synchronized (this) {
                    dumpServicesLocked(fd, pw, args, opti, true, dumpClient, null);
                }
                return;
            } else {
                // Dumping a single activity?
                if (!dumpActivity(fd, pw, cmd, args, opti, dumpAll)) {
                    pw.println("Bad activity command, or no activities match: " + cmd);
                    pw.println("Use -h for help.");
                }
            }
            if (!more) {
                Binder.restoreCallingIdentity(origId);
                return;
            }
        }
@@ -8528,6 +8524,7 @@ public final class ActivityManagerService extends ActivityManagerNative
            }
            dumpProcessesLocked(fd, pw, args, opti, dumpAll, dumpPackage);
        }
        Binder.restoreCallingIdentity(origId);
    }
    boolean dumpActivitiesLocked(FileDescriptor fd, PrintWriter pw, String[] args,