Skip to content

Commit 11e123f

Browse files
krutonAndroid (Google) Code Review
authored andcommitted
Merge "Check system app before removal" into jb-dev
2 parents e54c5f1 + 87b5d7b commit 11e123f

File tree

1 file changed

+25
-7
lines changed

1 file changed

+25
-7
lines changed

services/java/com/android/server/pm/PackageManagerService.java

Lines changed: 25 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1064,7 +1064,7 @@ public PackageManagerService(Context context, boolean factoryTest, boolean onlyC
10641064
mInstaller.moveFiles();
10651065

10661066
// Prune any system packages that no longer exist.
1067-
final List<String> possiblyDeletedSystemApps = new ArrayList<String>();
1067+
final List<String> possiblyDeletedUpdatedSystemApps = new ArrayList<String>();
10681068
if (!mOnlyCore) {
10691069
Iterator<PackageSetting> psit = mSettings.mPackages.values().iterator();
10701070
while (psit.hasNext()) {
@@ -1104,7 +1104,10 @@ public PackageManagerService(Context context, boolean factoryTest, boolean onlyC
11041104
mInstaller.remove(ps.name, 0);
11051105
sUserManager.removePackageForAllUsers(ps.name);
11061106
} else {
1107-
possiblyDeletedSystemApps.add(ps.name);
1107+
final PackageSetting disabledPs = mSettings.getDisabledSystemPkgLPr(ps.name);
1108+
if (disabledPs.codePath == null || !disabledPs.codePath.exists()) {
1109+
possiblyDeletedUpdatedSystemApps.add(ps.name);
1110+
}
11081111
}
11091112
}
11101113
}
@@ -1135,18 +1138,33 @@ public PackageManagerService(Context context, boolean factoryTest, boolean onlyC
11351138
scanMode, 0);
11361139

11371140
/**
1138-
* Remove disable package settings for any system apps
1139-
* that were removed via an OTA.
1141+
* Remove disable package settings for any updated system
1142+
* apps that were removed via an OTA. If they're not a
1143+
* previously-updated app, remove them completely.
1144+
* Otherwise, just revoke their system-level permissions.
11401145
*/
1141-
for (String deletedAppName : possiblyDeletedSystemApps) {
1146+
for (String deletedAppName : possiblyDeletedUpdatedSystemApps) {
11421147
PackageParser.Package deletedPkg = mPackages.get(deletedAppName);
1143-
if (deletedPkg != null) {
1144-
mSettings.removeDisabledSystemPackageLPw(deletedAppName);
1148+
mSettings.removeDisabledSystemPackageLPw(deletedAppName);
1149+
1150+
String msg;
1151+
if (deletedPkg == null) {
1152+
msg = "Updated system package " + deletedAppName
1153+
+ " no longer exists; wiping its data";
1154+
1155+
mInstaller.remove(deletedAppName, 0);
1156+
sUserManager.removePackageForAllUsers(deletedAppName);
1157+
} else {
1158+
msg = "Updated system app + " + deletedAppName
1159+
+ " no longer present; removing system privileges for "
1160+
+ deletedAppName;
1161+
11451162
deletedPkg.applicationInfo.flags &= ~ApplicationInfo.FLAG_SYSTEM;
11461163

11471164
PackageSetting deletedPs = mSettings.mPackages.get(deletedAppName);
11481165
deletedPs.pkgFlags &= ~ApplicationInfo.FLAG_SYSTEM;
11491166
}
1167+
reportSettingsProblem(Log.WARN, msg);
11501168
}
11511169
} else {
11521170
mAppInstallObserver = null;

0 commit comments

Comments
 (0)