From 6de3d56a9fe8ae8fdc6bfe9e0231a531327b9d04 Mon Sep 17 00:00:00 2001 From: Todd Kennedy Date: Mon, 27 Feb 2017 16:12:23 -0800 Subject: [PATCH] handle case where user == USER_ALL Change-Id: I0f2737dbe994595e2c624b674a1a8ce863ae1854 Fixes: 35271941 Test: cts-tradefed run commandAndExit cts-dev -m CtsAppSecurityHostTestCases -t android.appsecurity.cts.PkgInstallSignatureVerificationTest#testInstallEphemeralRequiresV2Signature --- .../server/pm/PackageManagerService.java | 29 ++++++++++++++----- 1 file changed, 21 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 116c0a353643c..ce214b9be1ad5 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -15901,14 +15901,6 @@ public class PackageManagerService extends IPackageManager.Stub { final PackageSetting ps = mSettings.mPackages.get(pkgName); - // don't allow an upgrade from full to ephemeral - if (isInstantApp && !ps.getInstantApp(user.getIdentifier())) { - // can't downgrade from full to instant - Slog.w(TAG, "Can't replace app with instant app: " + pkgName); - res.setReturnCode(PackageManager.INSTALL_FAILED_INSTANT_APP_INVALID); - return; - } - // verify signatures are valid if (shouldCheckUpgradeKeySetLP(ps, scanFlags)) { if (!checkUpgradeKeySetLP(ps, pkg)) { @@ -15966,6 +15958,27 @@ public class PackageManagerService extends IPackageManager.Stub { // In case of rollback, remember per-user/profile install state allUsers = sUserManager.getUserIds(); installedUsers = ps.queryInstalledUsers(allUsers, true); + + // don't allow an upgrade from full to ephemeral + if (isInstantApp) { + if (user == null || user.getIdentifier() == UserHandle.USER_ALL) { + for (int currentUser : allUsers) { + if (!ps.getInstantApp(currentUser)) { + // can't downgrade from full to instant + Slog.w(TAG, "Can't replace full app with instant app: " + pkgName + + " for user: " + currentUser); + res.setReturnCode(PackageManager.INSTALL_FAILED_INSTANT_APP_INVALID); + return; + } + } + } else if (!ps.getInstantApp(user.getIdentifier())) { + // can't downgrade from full to instant + Slog.w(TAG, "Can't replace full app with instant app: " + pkgName + + " for user: " + user.getIdentifier()); + res.setReturnCode(PackageManager.INSTALL_FAILED_INSTANT_APP_INVALID); + return; + } + } } // Update what is removed