From 2fce0901463af17ebfdb557d01b41cc5e4e97ecf Mon Sep 17 00:00:00 2001 From: bkchoi Date: Mon, 11 Jul 2022 13:19:05 -0700 Subject: [PATCH] Fix a bug in UserSystemPackageInstaller#installWhitelistedSystemPackages When userWhitelist was not null, it only mutated the packages in userWhitelist, and other packages left untouched. The correct behavior is to iterate all packages and install or uninstall according to userWhitelist. BYPASS_INCLUSIVE_LANGUAGE_REASON=existing code that cannot be changed Bug: 234877652 Test: atest UserSystemPackageInstallerTest Test: Manual test with gcar_emu_x86_64 emulator Change-Id: I4325565d8acaeffd4aab5a4b6295d325edb738a9 --- .../server/pm/UserSystemPackageInstaller.java | 43 ++++++------------- 1 file changed, 13 insertions(+), 30 deletions(-) diff --git a/services/core/java/com/android/server/pm/UserSystemPackageInstaller.java b/services/core/java/com/android/server/pm/UserSystemPackageInstaller.java index 937b2cf047a49..b57d4d55b6ebc 100644 --- a/services/core/java/com/android/server/pm/UserSystemPackageInstaller.java +++ b/services/core/java/com/android/server/pm/UserSystemPackageInstaller.java @@ -219,38 +219,21 @@ class UserSystemPackageInstaller { // Install/uninstall system packages per user. for (int userId : mUm.getUserIds()) { - final Set userWhitelist = getInstallablePackagesForUserId(userId); + final Set userAllowlist = getInstallablePackagesForUserId(userId); - // If null, run for all packages - if (userWhitelist == null) { - pmInt.forEachPackageState(packageState -> { - if (packageState.getPkg() == null) { - return; - } - final boolean install = !packageState.getTransientState() - .isHiddenUntilInstalled(); - if (packageState.getUserStateOrDefault(userId).isInstalled() != install - && shouldChangeInstallationState(packageState, install, userId, - isFirstBoot, isConsideredUpgrade, preExistingPackages)) { - changesToCommit.add(userId, packageState.getPackageName(), install); - } - }); - } else { - for (String packageName : userWhitelist) { - PackageStateInternal packageState = pmInt.getPackageStateInternal(packageName); - if (packageState.getPkg() == null) { - continue; - } - - final boolean install = !packageState.getTransientState() - .isHiddenUntilInstalled(); - if (packageState.getUserStateOrDefault(userId).isInstalled() != install - && shouldChangeInstallationState(packageState, install, userId, - isFirstBoot, isConsideredUpgrade, preExistingPackages)) { - changesToCommit.add(userId, packageState.getPackageName(), install); - } + pmInt.forEachPackageState(packageState -> { + if (packageState.getPkg() == null) { + return; } - } + boolean install = (userAllowlist == null + || userAllowlist.contains(packageState.getPackageName())) + && !packageState.getTransientState().isHiddenUntilInstalled(); + if (packageState.getUserStateOrDefault(userId).isInstalled() != install + && shouldChangeInstallationState(packageState, install, userId, + isFirstBoot, isConsideredUpgrade, preExistingPackages)) { + changesToCommit.add(userId, packageState.getPackageName(), install); + } + }); } pmInt.commitPackageStateMutation(null, packageStateMutator -> {