OSDN Git Service

NotificationManager: clean calling identity in dump().
authorMakoto Onuki <omakoto@google.com>
Mon, 25 Jun 2018 23:01:02 +0000 (16:01 -0700)
committerMakoto Onuki <omakoto@google.com>
Mon, 25 Jun 2018 23:09:03 +0000 (16:09 -0700)
When a device has work profile, "dumpsys notifiaction" often crashes
if the caller doesn't have the CROSS_USER permission.

The dump() method is protected with checkDumpAndUsageStatsPermission(),
and it won't need further permission check.

Test: "dumpsys notification"
Change-Id: Ief5269dec1e334bcd96013c349a468a0136a9551

services/core/java/com/android/server/notification/NotificationManagerService.java

index c45d861..6402b7b 100644 (file)
@@ -3125,14 +3125,19 @@ public class NotificationManagerService extends SystemService {
         protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
             if (!DumpUtils.checkDumpAndUsageStatsPermission(getContext(), TAG, pw)) return;
             final DumpFilter filter = DumpFilter.parseFromArguments(args);
-            if (filter.stats) {
-                dumpJson(pw, filter);
-            } else if (filter.proto) {
-                dumpProto(fd, filter);
-            } else if (filter.criticalPriority) {
-                dumpNotificationRecords(pw, filter);
-            } else {
-                dumpImpl(pw, filter);
+            final long token = Binder.clearCallingIdentity();
+            try {
+                if (filter.stats) {
+                    dumpJson(pw, filter);
+                } else if (filter.proto) {
+                    dumpProto(fd, filter);
+                } else if (filter.criticalPriority) {
+                    dumpNotificationRecords(pw, filter);
+                } else {
+                    dumpImpl(pw, filter);
+                }
+            } finally {
+                Binder.restoreCallingIdentity(token);
             }
         }