Loading services/core/java/com/android/server/pm/InstallPackageHelper.java +23 −28 Original line number Diff line number Diff line Loading @@ -86,6 +86,7 @@ import static com.android.server.pm.PackageManagerServiceUtils.compareSignatures import static com.android.server.pm.PackageManagerServiceUtils.compressedFileExists; import static com.android.server.pm.PackageManagerServiceUtils.deriveAbiOverride; import static com.android.server.pm.PackageManagerServiceUtils.logCriticalInfo; import static com.android.server.pm.SharedUidMigration.BEST_EFFORT; import android.annotation.NonNull; import android.annotation.Nullable; Loading Loading @@ -287,6 +288,12 @@ final class InstallPackageHelper { SharedUserSetting sharedUserSetting = mPm.mSettings.getSharedUserSettingLPr(pkgSetting); if (sharedUserSetting != null) { sharedUserSetting.addPackage(pkgSetting); if (parsedPackage.isLeavingSharedUid() && SharedUidMigration.applyStrategy(BEST_EFFORT) && sharedUserSetting.isSingleUser()) { // Attempt the transparent shared UID migration mPm.mSettings.convertSharedUserSettingsLPw(sharedUserSetting); } } if (reconciledPkg.mInstallArgs != null && reconciledPkg.mInstallArgs.mForceQueryableOverride) { Loading Loading @@ -2216,23 +2223,8 @@ final class InstallPackageHelper { } incrementalStorages.add(storage); } int previousAppId = 0; if (reconciledPkg.mScanResult.needsNewAppId()) { // Only set previousAppId if the app is migrating out of shared UID previousAppId = reconciledPkg.mScanResult.mPreviousAppId; if (pkg.shouldInheritKeyStoreKeys()) { // Migrate keystore data mAppDataHelper.migrateKeyStoreData( previousAppId, reconciledPkg.mPkgSetting.getAppId()); } if (reconciledPkg.mInstallResult.mRemovedInfo.mRemovedAppId == previousAppId) { // If the previous app ID is removed, clear the keys mAppDataHelper.clearKeystoreData(UserHandle.USER_ALL, previousAppId); } } mAppDataHelper.prepareAppDataPostCommitLIF(pkg, previousAppId); // Hardcode previousAppId to 0 to disable any data migration (http://b/221088088) mAppDataHelper.prepareAppDataPostCommitLIF(pkg, 0); if (reconciledPkg.mPrepareResult.mClearCodeCache) { mAppDataHelper.clearAppDataLIF(pkg, UserHandle.USER_ALL, FLAG_STORAGE_DE | FLAG_STORAGE_CE | FLAG_STORAGE_EXTERNAL Loading Loading @@ -3026,8 +3018,7 @@ final class InstallPackageHelper { installPackageFromSystemLIF(stubPkg.getPath(), mPm.mUserManager.getUserIds() /*allUserHandles*/, null /*origUserHandles*/, true /*writeSettings*/, Process.INVALID_UID /*previousAppId*/); true /*writeSettings*/); } catch (PackageManagerException pme) { // Serious WTF; we have to be able to install the stub Slog.wtf(TAG, "Failed to restore system package:" + stubPkg.getPackageName(), Loading Loading @@ -3154,10 +3145,8 @@ final class InstallPackageHelper { try { synchronized (mPm.mInstallLock) { final int[] origUsers = outInfo == null ? null : outInfo.mOrigUsers; final int previousAppId = disabledPs.getAppId() != deletedPs.getAppId() ? deletedPs.getAppId() : Process.INVALID_UID; installPackageFromSystemLIF(disabledPs.getPathString(), allUserHandles, origUsers, writeSettings, previousAppId); origUsers, writeSettings); } } catch (PackageManagerException e) { Slog.w(TAG, "Failed to restore system package:" + deletedPs.getPackageName() + ": " Loading Loading @@ -3200,7 +3189,7 @@ final class InstallPackageHelper { @GuardedBy("mPm.mInstallLock") private void installPackageFromSystemLIF(@NonNull String codePathString, @NonNull int[] allUserHandles, @Nullable int[] origUserHandles, boolean writeSettings, int previousAppId) boolean writeSettings) throws PackageManagerException { final File codePath = new File(codePathString); @ParsingPackageUtils.ParseFlags int parseFlags = Loading @@ -3223,13 +3212,12 @@ final class InstallPackageHelper { mAppDataHelper.prepareAppDataAfterInstallLIF(pkg); setPackageInstalledForSystemPackage(pkg, allUserHandles, origUserHandles, writeSettings, previousAppId); setPackageInstalledForSystemPackage(pkg, allUserHandles, origUserHandles, writeSettings); } private void setPackageInstalledForSystemPackage(@NonNull AndroidPackage pkg, @NonNull int[] allUserHandles, @Nullable int[] origUserHandles, boolean writeSettings, int previousAppId) { boolean writeSettings) { // writer synchronized (mPm.mLock) { PackageSetting ps = mPm.mSettings.getPackageLPr(pkg.getPackageName()); Loading Loading @@ -3263,7 +3251,7 @@ final class InstallPackageHelper { // The method below will take care of removing obsolete permissions and granting // install permissions. mPm.mPermissionManager.onPackageInstalled(pkg, previousAppId, mPm.mPermissionManager.onPackageInstalled(pkg, Process.INVALID_UID, PermissionManagerServiceInternal.PackageInstalledParams.DEFAULT, UserHandle.USER_ALL); for (final int userId : allUserHandles) { Loading Loading @@ -3701,7 +3689,14 @@ final class InstallPackageHelper { } disabledPkgSetting = mPm.mSettings.getDisabledSystemPkgLPr( parsedPackage.getPackageName()); if (parsedPackage.getSharedUserId() != null && !parsedPackage.isLeavingSharedUid()) { boolean ignoreSharedUserId = false; if (installedPkgSetting == null) { // We can directly ignore sharedUserSetting for new installs ignoreSharedUserId = parsedPackage.isLeavingSharedUid(); } if (!ignoreSharedUserId && parsedPackage.getSharedUserId() != null) { sharedUserSetting = mPm.mSettings.getSharedUserLPw( parsedPackage.getSharedUserId(), 0 /*pkgFlags*/, 0 /*pkgPrivateFlags*/, true /*create*/); Loading services/core/java/com/android/server/pm/Installer.java +6 −0 Original line number Diff line number Diff line Loading @@ -220,6 +220,8 @@ public class Installer extends SystemService { if (!checkBeforeRemote()) { return buildPlaceholderCreateAppDataResult(); } // Hardcode previousAppId to 0 to disable any data migration (http://b/221088088) args.previousAppId = 0; try { return mInstalld.createAppData(args); } catch (Exception e) { Loading @@ -234,6 +236,10 @@ public class Installer extends SystemService { Arrays.fill(results, buildPlaceholderCreateAppDataResult()); return results; } // Hardcode previousAppId to 0 to disable any data migration (http://b/221088088) for (final CreateAppDataArgs arg : args) { arg.previousAppId = 0; } try { return mInstalld.createAppDataBatched(args); } catch (Exception e) { Loading services/core/java/com/android/server/pm/PackageSetting.java +1 −0 Original line number Diff line number Diff line Loading @@ -477,6 +477,7 @@ public class PackageSetting extends SettingBase implements PackageStateInternal public void setSharedUserAppId(int sharedUserAppId) { mSharedUserAppId = sharedUserAppId; onChanged(); } @Override Loading services/core/java/com/android/server/pm/RemovePackageHelper.java +5 −1 Original line number Diff line number Diff line Loading @@ -284,7 +284,11 @@ final class RemovePackageHelper { List<AndroidPackage> sharedUserPkgs = sus != null ? sus.getPackages() : Collections.emptyList(); mPermissionManager.onPackageUninstalled(packageName, deletedPs.getAppId(), deletedPs.getPkg(), sharedUserPkgs, UserHandle.USER_ALL); deletedPkg, sharedUserPkgs, UserHandle.USER_ALL); // After permissions are handled, check if the shared user can be migrated if (sus != null) { mPm.mSettings.checkAndConvertSharedUserSettingsLPw(sus); } } mPm.clearPackagePreferredActivitiesLPw( deletedPs.getPackageName(), changedUsers, UserHandle.USER_ALL); Loading services/core/java/com/android/server/pm/ScanPackageUtils.java +10 −20 Original line number Diff line number Diff line Loading @@ -165,16 +165,7 @@ final class ScanPackageUtils { } } int previousAppId = Process.INVALID_UID; if (pkgSetting != null && oldSharedUserSetting != sharedUserSetting) { if (oldSharedUserSetting != null && sharedUserSetting == null) { previousAppId = pkgSetting.getAppId(); // Log that something is leaving shareduid and keep going Slog.i(TAG, "Package " + parsedPackage.getPackageName() + " shared user changed from " + oldSharedUserSetting.name + " to " + "<nothing>."); } else { PackageManagerService.reportSettingsProblem(Log.WARN, "Package " + parsedPackage.getPackageName() + " shared user changed from " + (oldSharedUserSetting != null Loading @@ -184,7 +175,6 @@ final class ScanPackageUtils { + "; replacing with new"); pkgSetting = null; } } String[] usesSdkLibraries = null; if (!parsedPackage.getUsesSdkLibraries().isEmpty()) { Loading Loading @@ -474,8 +464,8 @@ final class ScanPackageUtils { return new ScanResult(request, true, pkgSetting, changedAbiCodePath, !createNewPackage /* existingSettingCopied */, previousAppId, sdkLibraryInfo, staticSharedLibraryInfo, dynamicSharedLibraryInfos); Process.INVALID_UID /* previousAppId */ , sdkLibraryInfo, staticSharedLibraryInfo, dynamicSharedLibraryInfos); } /** Loading Loading
services/core/java/com/android/server/pm/InstallPackageHelper.java +23 −28 Original line number Diff line number Diff line Loading @@ -86,6 +86,7 @@ import static com.android.server.pm.PackageManagerServiceUtils.compareSignatures import static com.android.server.pm.PackageManagerServiceUtils.compressedFileExists; import static com.android.server.pm.PackageManagerServiceUtils.deriveAbiOverride; import static com.android.server.pm.PackageManagerServiceUtils.logCriticalInfo; import static com.android.server.pm.SharedUidMigration.BEST_EFFORT; import android.annotation.NonNull; import android.annotation.Nullable; Loading Loading @@ -287,6 +288,12 @@ final class InstallPackageHelper { SharedUserSetting sharedUserSetting = mPm.mSettings.getSharedUserSettingLPr(pkgSetting); if (sharedUserSetting != null) { sharedUserSetting.addPackage(pkgSetting); if (parsedPackage.isLeavingSharedUid() && SharedUidMigration.applyStrategy(BEST_EFFORT) && sharedUserSetting.isSingleUser()) { // Attempt the transparent shared UID migration mPm.mSettings.convertSharedUserSettingsLPw(sharedUserSetting); } } if (reconciledPkg.mInstallArgs != null && reconciledPkg.mInstallArgs.mForceQueryableOverride) { Loading Loading @@ -2216,23 +2223,8 @@ final class InstallPackageHelper { } incrementalStorages.add(storage); } int previousAppId = 0; if (reconciledPkg.mScanResult.needsNewAppId()) { // Only set previousAppId if the app is migrating out of shared UID previousAppId = reconciledPkg.mScanResult.mPreviousAppId; if (pkg.shouldInheritKeyStoreKeys()) { // Migrate keystore data mAppDataHelper.migrateKeyStoreData( previousAppId, reconciledPkg.mPkgSetting.getAppId()); } if (reconciledPkg.mInstallResult.mRemovedInfo.mRemovedAppId == previousAppId) { // If the previous app ID is removed, clear the keys mAppDataHelper.clearKeystoreData(UserHandle.USER_ALL, previousAppId); } } mAppDataHelper.prepareAppDataPostCommitLIF(pkg, previousAppId); // Hardcode previousAppId to 0 to disable any data migration (http://b/221088088) mAppDataHelper.prepareAppDataPostCommitLIF(pkg, 0); if (reconciledPkg.mPrepareResult.mClearCodeCache) { mAppDataHelper.clearAppDataLIF(pkg, UserHandle.USER_ALL, FLAG_STORAGE_DE | FLAG_STORAGE_CE | FLAG_STORAGE_EXTERNAL Loading Loading @@ -3026,8 +3018,7 @@ final class InstallPackageHelper { installPackageFromSystemLIF(stubPkg.getPath(), mPm.mUserManager.getUserIds() /*allUserHandles*/, null /*origUserHandles*/, true /*writeSettings*/, Process.INVALID_UID /*previousAppId*/); true /*writeSettings*/); } catch (PackageManagerException pme) { // Serious WTF; we have to be able to install the stub Slog.wtf(TAG, "Failed to restore system package:" + stubPkg.getPackageName(), Loading Loading @@ -3154,10 +3145,8 @@ final class InstallPackageHelper { try { synchronized (mPm.mInstallLock) { final int[] origUsers = outInfo == null ? null : outInfo.mOrigUsers; final int previousAppId = disabledPs.getAppId() != deletedPs.getAppId() ? deletedPs.getAppId() : Process.INVALID_UID; installPackageFromSystemLIF(disabledPs.getPathString(), allUserHandles, origUsers, writeSettings, previousAppId); origUsers, writeSettings); } } catch (PackageManagerException e) { Slog.w(TAG, "Failed to restore system package:" + deletedPs.getPackageName() + ": " Loading Loading @@ -3200,7 +3189,7 @@ final class InstallPackageHelper { @GuardedBy("mPm.mInstallLock") private void installPackageFromSystemLIF(@NonNull String codePathString, @NonNull int[] allUserHandles, @Nullable int[] origUserHandles, boolean writeSettings, int previousAppId) boolean writeSettings) throws PackageManagerException { final File codePath = new File(codePathString); @ParsingPackageUtils.ParseFlags int parseFlags = Loading @@ -3223,13 +3212,12 @@ final class InstallPackageHelper { mAppDataHelper.prepareAppDataAfterInstallLIF(pkg); setPackageInstalledForSystemPackage(pkg, allUserHandles, origUserHandles, writeSettings, previousAppId); setPackageInstalledForSystemPackage(pkg, allUserHandles, origUserHandles, writeSettings); } private void setPackageInstalledForSystemPackage(@NonNull AndroidPackage pkg, @NonNull int[] allUserHandles, @Nullable int[] origUserHandles, boolean writeSettings, int previousAppId) { boolean writeSettings) { // writer synchronized (mPm.mLock) { PackageSetting ps = mPm.mSettings.getPackageLPr(pkg.getPackageName()); Loading Loading @@ -3263,7 +3251,7 @@ final class InstallPackageHelper { // The method below will take care of removing obsolete permissions and granting // install permissions. mPm.mPermissionManager.onPackageInstalled(pkg, previousAppId, mPm.mPermissionManager.onPackageInstalled(pkg, Process.INVALID_UID, PermissionManagerServiceInternal.PackageInstalledParams.DEFAULT, UserHandle.USER_ALL); for (final int userId : allUserHandles) { Loading Loading @@ -3701,7 +3689,14 @@ final class InstallPackageHelper { } disabledPkgSetting = mPm.mSettings.getDisabledSystemPkgLPr( parsedPackage.getPackageName()); if (parsedPackage.getSharedUserId() != null && !parsedPackage.isLeavingSharedUid()) { boolean ignoreSharedUserId = false; if (installedPkgSetting == null) { // We can directly ignore sharedUserSetting for new installs ignoreSharedUserId = parsedPackage.isLeavingSharedUid(); } if (!ignoreSharedUserId && parsedPackage.getSharedUserId() != null) { sharedUserSetting = mPm.mSettings.getSharedUserLPw( parsedPackage.getSharedUserId(), 0 /*pkgFlags*/, 0 /*pkgPrivateFlags*/, true /*create*/); Loading
services/core/java/com/android/server/pm/Installer.java +6 −0 Original line number Diff line number Diff line Loading @@ -220,6 +220,8 @@ public class Installer extends SystemService { if (!checkBeforeRemote()) { return buildPlaceholderCreateAppDataResult(); } // Hardcode previousAppId to 0 to disable any data migration (http://b/221088088) args.previousAppId = 0; try { return mInstalld.createAppData(args); } catch (Exception e) { Loading @@ -234,6 +236,10 @@ public class Installer extends SystemService { Arrays.fill(results, buildPlaceholderCreateAppDataResult()); return results; } // Hardcode previousAppId to 0 to disable any data migration (http://b/221088088) for (final CreateAppDataArgs arg : args) { arg.previousAppId = 0; } try { return mInstalld.createAppDataBatched(args); } catch (Exception e) { Loading
services/core/java/com/android/server/pm/PackageSetting.java +1 −0 Original line number Diff line number Diff line Loading @@ -477,6 +477,7 @@ public class PackageSetting extends SettingBase implements PackageStateInternal public void setSharedUserAppId(int sharedUserAppId) { mSharedUserAppId = sharedUserAppId; onChanged(); } @Override Loading
services/core/java/com/android/server/pm/RemovePackageHelper.java +5 −1 Original line number Diff line number Diff line Loading @@ -284,7 +284,11 @@ final class RemovePackageHelper { List<AndroidPackage> sharedUserPkgs = sus != null ? sus.getPackages() : Collections.emptyList(); mPermissionManager.onPackageUninstalled(packageName, deletedPs.getAppId(), deletedPs.getPkg(), sharedUserPkgs, UserHandle.USER_ALL); deletedPkg, sharedUserPkgs, UserHandle.USER_ALL); // After permissions are handled, check if the shared user can be migrated if (sus != null) { mPm.mSettings.checkAndConvertSharedUserSettingsLPw(sus); } } mPm.clearPackagePreferredActivitiesLPw( deletedPs.getPackageName(), changedUsers, UserHandle.USER_ALL); Loading
services/core/java/com/android/server/pm/ScanPackageUtils.java +10 −20 Original line number Diff line number Diff line Loading @@ -165,16 +165,7 @@ final class ScanPackageUtils { } } int previousAppId = Process.INVALID_UID; if (pkgSetting != null && oldSharedUserSetting != sharedUserSetting) { if (oldSharedUserSetting != null && sharedUserSetting == null) { previousAppId = pkgSetting.getAppId(); // Log that something is leaving shareduid and keep going Slog.i(TAG, "Package " + parsedPackage.getPackageName() + " shared user changed from " + oldSharedUserSetting.name + " to " + "<nothing>."); } else { PackageManagerService.reportSettingsProblem(Log.WARN, "Package " + parsedPackage.getPackageName() + " shared user changed from " + (oldSharedUserSetting != null Loading @@ -184,7 +175,6 @@ final class ScanPackageUtils { + "; replacing with new"); pkgSetting = null; } } String[] usesSdkLibraries = null; if (!parsedPackage.getUsesSdkLibraries().isEmpty()) { Loading Loading @@ -474,8 +464,8 @@ final class ScanPackageUtils { return new ScanResult(request, true, pkgSetting, changedAbiCodePath, !createNewPackage /* existingSettingCopied */, previousAppId, sdkLibraryInfo, staticSharedLibraryInfo, dynamicSharedLibraryInfos); Process.INVALID_UID /* previousAppId */ , sdkLibraryInfo, staticSharedLibraryInfo, dynamicSharedLibraryInfos); } /** Loading