summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Gampe <agampe@google.com>2018-08-31 15:47:01 -0700
committerAndreas Gampe <agampe@google.com>2018-08-31 18:05:18 -0700
commitfa8b57d4f50c1673947d0d9cf2c490e96d6e877a (patch)
tree08d11b0c57785704fdb0775e8b4578fa2a9d9ba9
parentf5121c964b5cc7ca4c71313b7a25abdd81377e36 (diff)
Framework: Allow root to send bg-dexopt
To allow testing, and work on rooted userdebug devices, allow the root user to issue package bg-dexopt commands. Bug: 111798412 Test: atest BackgroundDexOptServiceIntegrationTests Change-Id: I5f52b8322ba386c797a9176a1b216cc547c66456
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerService.java10
-rw-r--r--services/core/java/com/android/server/pm/PackageManagerShellCommand.java1
-rw-r--r--tests/BackgroundDexOptServiceIntegrationTests/src/com/android/server/pm/BackgroundDexOptServiceIntegrationTests.java7
3 files changed, 12 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 182901ac0ba6..9b097bfe0bc3 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -8960,15 +8960,15 @@ public class PackageManagerService extends IPackageManager.Stub
}
/**
- * Enforces that only the system UID or shell's UID can call a method exposed
- * via Binder.
+ * Enforces that only the system UID or root's UID or shell's UID can call
+ * a method exposed via Binder.
*
* @param message used as message if SecurityException is thrown
* @throws SecurityException if the caller is not system or shell
*/
- private static void enforceSystemOrShell(String message) {
+ private static void enforceSystemOrRootOrShell(String message) {
final int uid = Binder.getCallingUid();
- if (uid != Process.SYSTEM_UID && uid != Process.SHELL_UID) {
+ if (uid != Process.SYSTEM_UID && uid != Process.ROOT_UID && uid != Process.SHELL_UID) {
throw new SecurityException(message);
}
}
@@ -9454,7 +9454,7 @@ public class PackageManagerService extends IPackageManager.Stub
if (getInstantAppPackageName(Binder.getCallingUid()) != null) {
return false;
}
- enforceSystemOrShell("runBackgroundDexoptJob");
+ enforceSystemOrRootOrShell("runBackgroundDexoptJob");
final long identity = Binder.clearCallingIdentity();
try {
return BackgroundDexOptService.runIdleOptimizationsNow(this, mContext, packageNames);
diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
index f2c0395f9f0e..361416adc4ef 100644
--- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
+++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
@@ -1302,6 +1302,7 @@ class PackageManagerShellCommand extends ShellCommand {
}
boolean result = mInterface.runBackgroundDexoptJob(packageNames.isEmpty() ? null :
packageNames);
+ getOutPrintWriter().println(result ? "Success" : "Failure");
return result ? 0 : -1;
}
diff --git a/tests/BackgroundDexOptServiceIntegrationTests/src/com/android/server/pm/BackgroundDexOptServiceIntegrationTests.java b/tests/BackgroundDexOptServiceIntegrationTests/src/com/android/server/pm/BackgroundDexOptServiceIntegrationTests.java
index e509d2d87bf7..fd20f4a1fa77 100644
--- a/tests/BackgroundDexOptServiceIntegrationTests/src/com/android/server/pm/BackgroundDexOptServiceIntegrationTests.java
+++ b/tests/BackgroundDexOptServiceIntegrationTests/src/com/android/server/pm/BackgroundDexOptServiceIntegrationTests.java
@@ -154,6 +154,8 @@ public final class BackgroundDexOptServiceIntegrationTests {
stdout.append(new String(buf, 0, bytesRead));
}
fis.close();
+ Log.i(TAG, "stdout");
+ Log.i(TAG, stdout.toString());
return stdout.toString();
}
@@ -202,7 +204,10 @@ public final class BackgroundDexOptServiceIntegrationTests {
// TODO(aeubanks): figure out how to get scheduled bg-dexopt to run
private static void runBackgroundDexOpt() throws IOException {
- runShellCommand("cmd package bg-dexopt-job " + PACKAGE_NAME);
+ String result = runShellCommand("cmd package bg-dexopt-job " + PACKAGE_NAME);
+ if (!result.trim().equals("Success")) {
+ throw new IllegalStateException("Expected command success, received >" + result + "<");
+ }
}
// Set the time ahead of the last use time of the test app in days.