diff options
| author | 2019-11-20 11:37:01 -0800 | |
|---|---|---|
| committer | 2019-11-20 14:02:15 -0800 | |
| commit | 9de58d2250446235a546ee2fe2edab71a21e3629 (patch) | |
| tree | 2d4eb9512ff0cc9b281bda7345ec1559ebc9f2c2 | |
| parent | 53ed21a49c754044eb62b0eff20270c76f9f30ac (diff) | |
Make sure known packages are preinstalled
Fixes: 144602147
Test: Booted
Change-Id: I9f1c9dbe7d12fe091e188b44ccfce32da6190af6
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 68 |
1 files changed, 54 insertions, 14 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index fa98c962afbf..b0ba27c31a71 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -22874,39 +22874,79 @@ public class PackageManagerService extends IPackageManager.Stub return pkg == null ? null : pkg.packageName; } + /** + * Only keep package names that refer to {@link PackageParser.Package#isSystem system} + * packages. + * + * @param pkgNames The packages to filter + * + * @return The filtered packages + */ + private @NonNull String[] filterOnlySystemPackages(@Nullable String... pkgNames) { + if (pkgNames == null) { + return ArrayUtils.emptyArray(String.class); + } + + ArrayList<String> systemPackageNames = new ArrayList<>(pkgNames.length); + + for (String pkgName: pkgNames) { + synchronized (mPackages) { + if (pkgName == null) { + continue; + } + + PackageParser.Package pkg = getPackage(pkgName); + if (pkg == null) { + Log.w(TAG, "Could not find package " + pkgName); + continue; + } + + if (!pkg.isSystem()) { + Log.w(TAG, pkgName + " is not system"); + continue; + } + + systemPackageNames.add(pkgName); + } + } + + return systemPackageNames.toArray(new String[]{}); + } + @Override public @NonNull String[] getKnownPackageNames(int knownPackage, int userId) { - switch(knownPackage) { + switch (knownPackage) { case PackageManagerInternal.PACKAGE_BROWSER: return new String[]{mPermissionManager.getDefaultBrowser(userId)}; case PackageManagerInternal.PACKAGE_INSTALLER: - return new String[]{mRequiredInstallerPackage}; + return filterOnlySystemPackages(mRequiredInstallerPackage); case PackageManagerInternal.PACKAGE_SETUP_WIZARD: - return new String[]{mSetupWizardPackage}; + return filterOnlySystemPackages(mSetupWizardPackage); case PackageManagerInternal.PACKAGE_SYSTEM: return new String[]{"android"}; case PackageManagerInternal.PACKAGE_VERIFIER: - return new String[]{mRequiredVerifierPackage}; + return filterOnlySystemPackages(mRequiredVerifierPackage); case PackageManagerInternal.PACKAGE_SYSTEM_TEXT_CLASSIFIER: - return new String[]{mSystemTextClassifierPackage}; + return filterOnlySystemPackages(mSystemTextClassifierPackage); case PackageManagerInternal.PACKAGE_PERMISSION_CONTROLLER: - return new String[]{mRequiredPermissionControllerPackage}; + return filterOnlySystemPackages(mRequiredPermissionControllerPackage); case PackageManagerInternal.PACKAGE_WELLBEING: - return new String[]{mWellbeingPackage}; + return filterOnlySystemPackages(mWellbeingPackage); case PackageManagerInternal.PACKAGE_DOCUMENTER: - return new String[]{mDocumenterPackage}; + return filterOnlySystemPackages(mDocumenterPackage); case PackageManagerInternal.PACKAGE_CONFIGURATOR: - return new String[]{mConfiguratorPackage}; + return filterOnlySystemPackages(mConfiguratorPackage); case PackageManagerInternal.PACKAGE_INCIDENT_REPORT_APPROVER: - return new String[]{mIncidentReportApproverPackage}; + return filterOnlySystemPackages(mIncidentReportApproverPackage); case PackageManagerInternal.PACKAGE_APP_PREDICTOR: - return new String[]{mAppPredictionServicePackage}; + return filterOnlySystemPackages(mAppPredictionServicePackage); case PackageManagerInternal.PACKAGE_TELEPHONY: - return mTelephonyPackages; + return filterOnlySystemPackages(mTelephonyPackages); case PackageManagerInternal.PACKAGE_WIFI: - return new String[]{mWifiPackage}; + return filterOnlySystemPackages(mWifiPackage); + default: + return ArrayUtils.emptyArray(String.class); } - return ArrayUtils.emptyArray(String.class); } @Override |