diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index fbf4c0cb9cc0d..10ec6c96c56d0 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -13565,6 +13565,16 @@ public class PackageManagerService extends IPackageManager.Stub { } } + // Check for shared user id changes + String invalidPackageName = + getParentOrChildPackageChangedSharedUser(oldPackage, pkg); + if (invalidPackageName != null) { + res.setError(INSTALL_FAILED_SHARED_USER_INCOMPATIBLE, + "Package " + invalidPackageName + " tried to change user " + + oldPackage.mSharedUserId); + return; + } + // In case of rollback, remember per-user/profile install state allUsers = sUserManager.getUserIds(); @@ -13839,15 +13849,6 @@ public class PackageManagerService extends IPackageManager.Stub { setInstallAndUpdateTime(newPackage, deletedPkgSetting.firstInstallTime, System.currentTimeMillis()); - // Check for shared user id changes - String invalidPackageName = getParentOrChildPackageChangedSharedUser( - deletedPackage, newPackage); - if (invalidPackageName != null) { - res.setError(INSTALL_FAILED_SHARED_USER_INCOMPATIBLE, - "Forbidding shared user change from " + deletedPkgSetting.sharedUser - + " to " + invalidPackageName); - } - // Update the package dynamic state if succeeded if (res.returnCode == PackageManager.INSTALL_SUCCEEDED) { // Now that the install succeeded make sure we remove data