From 8b7f36afec76be469b02a00d0e245208e7be7a8a Mon Sep 17 00:00:00 2001 From: Martin Stjernholm Date: Fri, 17 Feb 2023 17:52:10 +0000 Subject: [PATCH] Only allow access to the dexopt commands from root or shell. To align with ART Service behaviour (cf. commit 62e115d7682ee3ee277ab250499cb7afa8dffc50 in art/). This also drops the intentionally allowed app use of the `dump-profiles` command from commit a87770828637813dacd176ba3c8d3810f7ed6ab8. Test: adb shell pm dump-profiles com.android.egg Bug: 251903639 Change-Id: Ib547600e98bb9fab938f09b90f25cf80a762c78e --- .../java/com/android/server/pm/PackageManagerService.java | 8 -------- .../com/android/server/pm/PackageManagerShellCommand.java | 5 +++++ 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 6557ec565343f..de5f0c4d523fe 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -6675,15 +6675,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService @Deprecated public void legacyDumpProfiles(String packageName, boolean dumpClassesAndMethods) throws LegacyDexoptDisabledException { - /* Only the shell, root, or the app user should be able to dump profiles. */ - final int callingUid = Binder.getCallingUid(); final Computer snapshot = snapshotComputer(); - final String[] callerPackageNames = snapshot.getPackagesForUid(callingUid); - if (!PackageManagerServiceUtils.isRootOrShell(callingUid) - && !ArrayUtils.contains(callerPackageNames, packageName)) { - throw new SecurityException("dumpProfiles"); - } - AndroidPackage pkg = snapshot.getPackage(packageName); if (pkg == null) { throw new IllegalArgumentException("Unknown package: " + packageName); diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java index 41592bd3b7be0..586e1123fdc4c 100644 --- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java +++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java @@ -391,6 +391,11 @@ class PackageManagerShellCommand extends ShellCommand { private int runLegacyDexoptCommand(@NonNull String cmd) throws RemoteException, LegacyDexoptDisabledException { Installer.checkLegacyDexoptDisabled(); + + if (!PackageManagerServiceUtils.isRootOrShell(Binder.getCallingUid())) { + throw new SecurityException("Dexopt shell commands need root or shell access"); + } + switch (cmd) { case "compile": return runCompile();