Skip to content

Commit 7463ada

Browse files
author
Amith Yamasani
committed
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
1 parent 30ff5ae commit 7463ada

File tree

1 file changed

+11
-14
lines changed

1 file changed

+11
-14
lines changed

services/java/com/android/server/am/ActivityManagerService.java

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8309,7 +8309,7 @@ protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
83098309
+ android.Manifest.permission.DUMP);
83108310
return;
83118311
}
8312-
8312+
83138313
boolean dumpAll = false;
83148314
boolean dumpClient = false;
83158315
String dumpPackage = null;
@@ -8352,7 +8352,9 @@ protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
83528352
pw.println("Unknown argument: " + opt + "; use -h for help");
83538353
}
83548354
}
8355-
8355+
8356+
long origId = Binder.clearCallingIdentity();
8357+
boolean more = false;
83568358
// Is the caller requesting to dump a particular piece of data?
83578359
if (opti < args.length) {
83588360
String cmd = args[opti];
@@ -8361,7 +8363,6 @@ protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
83618363
synchronized (this) {
83628364
dumpActivitiesLocked(fd, pw, args, opti, true, dumpClient, null);
83638365
}
8364-
return;
83658366
} else if ("broadcasts".equals(cmd) || "b".equals(cmd)) {
83668367
String[] newArgs;
83678368
String name;
@@ -8378,7 +8379,6 @@ protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
83788379
synchronized (this) {
83798380
dumpBroadcastsLocked(fd, pw, args, opti, true, name);
83808381
}
8381-
return;
83828382
} else if ("intents".equals(cmd) || "i".equals(cmd)) {
83838383
String[] newArgs;
83848384
String name;
@@ -8395,7 +8395,6 @@ protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
83958395
synchronized (this) {
83968396
dumpPendingIntentsLocked(fd, pw, args, opti, true, name);
83978397
}
8398-
return;
83998398
} else if ("processes".equals(cmd) || "p".equals(cmd)) {
84008399
String[] newArgs;
84018400
String name;
@@ -8412,12 +8411,10 @@ protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
84128411
synchronized (this) {
84138412
dumpProcessesLocked(fd, pw, args, opti, true, name);
84148413
}
8415-
return;
84168414
} else if ("oom".equals(cmd) || "o".equals(cmd)) {
84178415
synchronized (this) {
84188416
dumpOomLocked(fd, pw, args, opti, true);
84198417
}
8420-
return;
84218418
} else if ("provider".equals(cmd)) {
84228419
String[] newArgs;
84238420
String name;
@@ -8434,12 +8431,10 @@ protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
84348431
pw.println("No providers match: " + name);
84358432
pw.println("Use -h for help.");
84368433
}
8437-
return;
84388434
} else if ("providers".equals(cmd) || "prov".equals(cmd)) {
84398435
synchronized (this) {
84408436
dumpProvidersLocked(fd, pw, args, opti, true, null);
84418437
}
8442-
return;
84438438
} else if ("service".equals(cmd)) {
84448439
String[] newArgs;
84458440
String name;
@@ -8457,13 +8452,11 @@ protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
84578452
pw.println("No services match: " + name);
84588453
pw.println("Use -h for help.");
84598454
}
8460-
return;
84618455
} else if ("package".equals(cmd)) {
84628456
String[] newArgs;
84638457
if (opti >= args.length) {
84648458
pw.println("package: no package name specified");
84658459
pw.println("Use -h for help.");
8466-
return;
84678460
} else {
84688461
dumpPackage = args[opti];
84698462
opti++;
@@ -8472,22 +8465,25 @@ protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
84728465
args.length - opti);
84738466
args = newArgs;
84748467
opti = 0;
8468+
more = true;
84758469
}
84768470
} else if ("services".equals(cmd) || "s".equals(cmd)) {
84778471
synchronized (this) {
84788472
dumpServicesLocked(fd, pw, args, opti, true, dumpClient, null);
84798473
}
8480-
return;
84818474
} else {
84828475
// Dumping a single activity?
84838476
if (!dumpActivity(fd, pw, cmd, args, opti, dumpAll)) {
84848477
pw.println("Bad activity command, or no activities match: " + cmd);
84858478
pw.println("Use -h for help.");
84868479
}
8480+
}
8481+
if (!more) {
8482+
Binder.restoreCallingIdentity(origId);
84878483
return;
84888484
}
84898485
}
8490-
8486+
84918487
// No piece of data specified, dump everything.
84928488
synchronized (this) {
84938489
boolean needSep;
@@ -8528,8 +8524,9 @@ protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
85288524
}
85298525
dumpProcessesLocked(fd, pw, args, opti, dumpAll, dumpPackage);
85308526
}
8527+
Binder.restoreCallingIdentity(origId);
85318528
}
8532-
8529+
85338530
boolean dumpActivitiesLocked(FileDescriptor fd, PrintWriter pw, String[] args,
85348531
int opti, boolean dumpAll, boolean dumpClient, String dumpPackage) {
85358532
pw.println("ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)");

0 commit comments

Comments
 (0)