From 20550021993a2662d1e160c63b608584fe7d895e Mon Sep 17 00:00:00 2001 From: Eugene Susla Date: Tue, 23 Mar 2021 10:51:22 -0700 Subject: [PATCH] Extend permission pregrant tracing utility Bug: 182579819 Test: manual Change-Id: I142d1c4470fe4f4b7c9ef52c23cf8dfc86fec792 --- core/java/android/permission/PermissionManager.java | 12 ++++++++++-- .../pm/permission/DefaultPermissionGrantPolicy.java | 8 ++++++++ .../pm/permission/PermissionManagerService.java | 2 +- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/core/java/android/permission/PermissionManager.java b/core/java/android/permission/PermissionManager.java index 177e422e78516..f7a81ae5a717a 100644 --- a/core/java/android/permission/PermissionManager.java +++ b/core/java/android/permission/PermissionManager.java @@ -78,6 +78,9 @@ import java.util.Set; public final class PermissionManager { private static final String LOG_TAG = PermissionManager.class.getName(); + /** @hide */ + public static final String LOG_TAG_TRACE_GRANTS = "PermissionGrantTrace"; + /** @hide */ public static final String KILL_APP_REASON_PERMISSIONS_REVOKED = "permissions revoked"; @@ -102,6 +105,8 @@ public final class PermissionManager { * Note: Changing this won't do anything on its own - you should also change the filtering in * {@link #shouldTraceGrant}. * + * See log output for tag {@link #LOG_TAG_TRACE_GRANTS} + * * @hide */ public static final boolean DEBUG_TRACE_GRANTS = false; @@ -318,8 +323,10 @@ public final class PermissionManager { } /** @hide */ - public static boolean shouldTraceGrant(String packageName, String permissionName, int userId) { + public static boolean shouldTraceGrant( + @NonNull String packageName, @NonNull String permissionName, int userId) { // To be modified when debugging + // template: if ("".equals(packageName) && "".equals(permissionName)) return true; return false; } @@ -347,7 +354,8 @@ public final class PermissionManager { @NonNull String permissionName, @NonNull UserHandle user) { if (DEBUG_TRACE_GRANTS && shouldTraceGrant(packageName, permissionName, user.getIdentifier())) { - Log.i(LOG_TAG, "App " + mContext.getPackageName() + " is granting " + packageName + " " + Log.i(LOG_TAG_TRACE_GRANTS, "App " + mContext.getPackageName() + " is granting " + + packageName + " " + permissionName + " for user " + user.getIdentifier(), new RuntimeException()); } try { diff --git a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java index 27bf8a13766a3..69aa32f2a1189 100644 --- a/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java +++ b/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java @@ -1722,6 +1722,14 @@ final class DefaultPermissionGrantPolicy { @Override public void grantPermission(@NonNull String permission, @NonNull PackageInfo pkg, @NonNull UserHandle user) { + if (PermissionManager.DEBUG_TRACE_GRANTS + && PermissionManager.shouldTraceGrant( + pkg.packageName, permission, user.getIdentifier())) { + Log.i(PermissionManager.LOG_TAG_TRACE_GRANTS, + "PregrantPolicy is granting " + pkg.packageName + " " + + permission + " for user " + user.getIdentifier(), + new RuntimeException()); + } PermissionState state = getPermissionState(permission, pkg, user); state.initGranted(); state.newGranted = true; diff --git a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java index 3bb5c1694734b..4acc036388185 100644 --- a/services/core/java/com/android/server/pm/permission/PermissionManagerService.java +++ b/services/core/java/com/android/server/pm/permission/PermissionManagerService.java @@ -1337,7 +1337,7 @@ public class PermissionManagerService extends IPermissionManager.Stub { boolean overridePolicy, int callingUid, final int userId, PermissionCallback callback) { if (PermissionManager.DEBUG_TRACE_GRANTS && PermissionManager.shouldTraceGrant(packageName, permName, userId)) { - Log.i(TAG, "System is granting " + packageName + " " + Log.i(PermissionManager.LOG_TAG_TRACE_GRANTS, "System is granting " + packageName + " " + permName + " for user " + userId + " on behalf of uid " + callingUid + " " + mPackageManagerInt.getNameForUid(callingUid), new RuntimeException());