diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 99e023e77323f..e85374523ee3f 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -12888,6 +12888,15 @@ public class PackageManagerService extends IPackageManager.Stub @Override public void dumpProfiles(String packageName) { + /* Only the shell, root, or the app user should be able to dump profiles. */ + final int callingUid = Binder.getCallingUid(); + final String[] callerPackageNames = getPackagesForUid(callingUid); + if (callingUid != Process.SHELL_UID + && callingUid != Process.ROOT_UID + && !ArrayUtils.contains(callerPackageNames, packageName)) { + throw new SecurityException("dumpProfiles"); + } + AndroidPackage pkg; synchronized (mLock) { pkg = mPackages.get(packageName); @@ -12895,13 +12904,6 @@ public class PackageManagerService extends IPackageManager.Stub throw new IllegalArgumentException("Unknown package: " + packageName); } } - /* Only the shell, root, or the app user should be able to dump profiles. */ - int callingUid = Binder.getCallingUid(); - if (callingUid != Process.SHELL_UID && - callingUid != Process.ROOT_UID && - callingUid != pkg.getUid()) { - throw new SecurityException("dumpProfiles"); - } synchronized (mInstallLock) { Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "dump profiles");