From 914bd793b3415a198d0cb4216ff9da0a184ab803 Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Fri, 3 Oct 2014 16:48:11 -0700 Subject: [PATCH] Correctly rollback failed system app installs. Fix bug where we disabled system app, but never turned it back on when the scanPackageLI() failed. Bug: 17805839 Change-Id: I73999263aee703af187afd980fa0d0ce8451cf0c --- .../com/android/server/pm/PackageManagerService.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index bac1de14d7d62..d90be0b5ed558 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -9970,6 +9970,7 @@ public class PackageManagerService extends IPackageManager.Stub { String installerPackageName, PackageInstalledInfo res) { if (DEBUG_INSTALL) Slog.d(TAG, "replaceSystemPackageLI: new=" + pkg + ", old=" + deletedPackage); + boolean disabledSystem = false; boolean updatedSettings = false; parseFlags |= PackageParser.PARSE_IS_SYSTEM; if ((deletedPackage.applicationInfo.flags&ApplicationInfo.FLAG_PRIVILEGED) != 0) { @@ -10003,7 +10004,8 @@ public class PackageManagerService extends IPackageManager.Stub { removePackageLI(oldPkgSetting, true); // writer synchronized (mPackages) { - if (!mSettings.disableSystemPackageLPw(packageName) && deletedPackage != null) { + disabledSystem = mSettings.disableSystemPackageLPw(packageName); + if (!disabledSystem && deletedPackage != null) { // We didn't need to disable the .apk as a current system package, // which means we are replacing another update that is already // installed. We need to make sure to delete the older one's .apk. @@ -10062,9 +10064,11 @@ public class PackageManagerService extends IPackageManager.Stub { Slog.e(TAG, "Failed to restore original package: " + e.getMessage()); } // Restore the old system information in Settings - synchronized(mPackages) { - if (updatedSettings) { + synchronized (mPackages) { + if (disabledSystem) { mSettings.enableSystemPackageLPw(packageName); + } + if (updatedSettings) { mSettings.setInstallerPackageName(packageName, oldPkgSetting.installerPackageName); }