Loading services/core/java/com/android/server/pm/InstallPackageHelper.java +8 −8 Original line number Diff line number Diff line Loading @@ -1269,10 +1269,9 @@ final class InstallPackageHelper { replace = true; if (DEBUG_INSTALL) Slog.d(TAG, "Replace existing package: " + pkgName); } final AndroidPackage oldPackage = mPm.mPackages.get(pkgName); if (replace && oldPackage != null) { if (replace) { // Prevent apps opting out from runtime permissions final int oldTargetSdk = oldPackage.getTargetSdkVersion(); final int oldTargetSdk = ps.getTargetSdkVersion(); final int newTargetSdk = parsedPackage.getTargetSdkVersion(); if (oldTargetSdk > Build.VERSION_CODES.LOLLIPOP_MR1 && newTargetSdk <= Build.VERSION_CODES.LOLLIPOP_MR1) { Loading @@ -1284,10 +1283,10 @@ final class InstallPackageHelper { + " target SDK " + oldTargetSdk + " does."); } // Prevent persistent apps from being updated if (oldPackage.isPersistent() if (ps.isPersistent() && ((installFlags & PackageManager.INSTALL_STAGED) == 0)) { throw new PrepareFailure(PackageManager.INSTALL_FAILED_INVALID_APK, "Package " + oldPackage.getPackageName() + " is a persistent app. " "Package " + pkgName + " is a persistent app. " + "Persistent apps are not updateable."); } } Loading Loading @@ -1668,7 +1667,7 @@ final class InstallPackageHelper { } // don't allow a system upgrade unless the upgrade hash matches if (oldPackage != null && oldPackage.getRestrictUpdateHash() != null if (oldPackageState.getRestrictUpdateHash() != null && oldPackageState.isSystem()) { final byte[] digestBytes; try { Loading @@ -1684,12 +1683,13 @@ final class InstallPackageHelper { throw new PrepareFailure(INSTALL_FAILED_INVALID_APK, "Could not compute hash: " + pkgName11); } if (!Arrays.equals(oldPackage.getRestrictUpdateHash(), digestBytes)) { if (!Arrays.equals(oldPackageState.getRestrictUpdateHash(), digestBytes)) { throw new PrepareFailure(INSTALL_FAILED_INVALID_APK, "New package fails restrict-update check: " + pkgName11); } // retain upgrade restriction parsedPackage.setRestrictUpdateHash(oldPackage.getRestrictUpdateHash()); parsedPackage.setRestrictUpdateHash( oldPackageState.getRestrictUpdateHash()); } if (oldPackage != null) { Loading services/core/java/com/android/server/pm/PackageManagerService.java +1 −2 Original line number Diff line number Diff line Loading @@ -1469,8 +1469,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService archPkg.versionCodeMajor = (int) (longVersionCode >> 32); archPkg.versionCode = (int) longVersionCode; // TODO(b/297916136): extract target sdk version. archPkg.targetSdkVersion = MIN_INSTALLABLE_TARGET_SDK; archPkg.targetSdkVersion = ps.getTargetSdkVersion(); // These get translated in flags important for user data management. archPkg.defaultToDeviceProtectedStorage = String.valueOf( Loading services/core/java/com/android/server/pm/PackageSetting.java +44 −2 File changed.Preview size limit exceeded, changes collapsed. Show changes services/core/java/com/android/server/pm/ScanPackageUtils.java +4 −2 Original line number Diff line number Diff line Loading @@ -220,7 +220,8 @@ final class ScanPackageUtils { UserManagerService.getInstance(), usesSdkLibraries, parsedPackage.getUsesSdkLibrariesVersionsMajor(), usesStaticLibraries, parsedPackage.getUsesStaticLibrariesVersions(), parsedPackage.getMimeGroups(), newDomainSetId); newDomainSetId, parsedPackage.isPersistent(), parsedPackage.getTargetSdkVersion(), parsedPackage.getRestrictUpdateHash()); } else { // make a deep copy to avoid modifying any existing system state. pkgSetting = new PackageSetting(pkgSetting); Loading @@ -240,7 +241,8 @@ final class ScanPackageUtils { UserManagerService.getInstance(), usesSdkLibraries, parsedPackage.getUsesSdkLibrariesVersionsMajor(), usesStaticLibraries, parsedPackage.getUsesStaticLibrariesVersions(), parsedPackage.getMimeGroups(), newDomainSetId); parsedPackage.getMimeGroups(), newDomainSetId, parsedPackage.isPersistent(), parsedPackage.getTargetSdkVersion(), parsedPackage.getRestrictUpdateHash()); } if (createNewPackage && originalPkgSetting != null) { Loading services/core/java/com/android/server/pm/Settings.java +16 −5 Original line number Diff line number Diff line Loading @@ -1060,7 +1060,8 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile boolean virtualPreload, boolean isStoppedSystemApp, UserManagerService userManager, String[] usesSdkLibraries, long[] usesSdkLibrariesVersions, String[] usesStaticLibraries, long[] usesStaticLibrariesVersions, Set<String> mimeGroupNames, @NonNull UUID domainSetId) { Set<String> mimeGroupNames, @NonNull UUID domainSetId, boolean isPersistent, int targetSdkVersion, byte[] restrictUpdatedHash) { final PackageSetting pkgSetting; if (originalPkg != null) { if (PackageManagerService.DEBUG_UPGRADE) Log.v(PackageManagerService.TAG, "Package " Loading @@ -1080,7 +1081,10 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile .setUsesStaticLibrariesVersions(usesStaticLibrariesVersions) // Update new package state. .setLastModifiedTime(codePath.lastModified()) .setDomainSetId(domainSetId); .setDomainSetId(domainSetId) .setIsPersistent(isPersistent) .setTargetSdkVersion(targetSdkVersion) .setRestrictUpdateHash(restrictUpdatedHash); pkgSetting.setFlags(pkgFlags) .setPrivateFlags(pkgPrivateFlags); } else { Loading @@ -1092,7 +1096,10 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile null /*cpuAbiOverrideString*/, versionCode, pkgFlags, pkgPrivateFlags, 0 /*sharedUserAppId*/, usesSdkLibraries, usesSdkLibrariesVersions, usesStaticLibraries, usesStaticLibrariesVersions, createMimeGroups(mimeGroupNames), domainSetId); createMimeGroups(mimeGroupNames), domainSetId) .setIsPersistent(isPersistent) .setTargetSdkVersion(targetSdkVersion) .setRestrictUpdateHash(restrictUpdatedHash); pkgSetting.setLastModifiedTime(codePath.lastModified()); if (sharedUser != null) { pkgSetting.setSharedUserAppId(sharedUser.mAppId); Loading Loading @@ -1206,7 +1213,8 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile int pkgPrivateFlags, @NonNull UserManagerService userManager, @Nullable String[] usesSdkLibraries, @Nullable long[] usesSdkLibrariesVersions, @Nullable String[] usesStaticLibraries, @Nullable long[] usesStaticLibrariesVersions, @Nullable Set<String> mimeGroupNames, @NonNull UUID domainSetId) @Nullable Set<String> mimeGroupNames, @NonNull UUID domainSetId, boolean isPersistent, int targetSdkVersion, byte[] restrictUpdatedHash) throws PackageManagerException { final String pkgName = pkgSetting.getPackageName(); if (sharedUser != null) { Loading Loading @@ -1258,7 +1266,10 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile pkgSetting.setPrimaryCpuAbi(primaryCpuAbi) .setSecondaryCpuAbi(secondaryCpuAbi) .updateMimeGroups(mimeGroupNames) .setDomainSetId(domainSetId); .setDomainSetId(domainSetId) .setIsPersistent(isPersistent) .setTargetSdkVersion(targetSdkVersion) .setRestrictUpdateHash(restrictUpdatedHash); // Update SDK library dependencies if needed. if (usesSdkLibraries != null && usesSdkLibrariesVersions != null && usesSdkLibraries.length == usesSdkLibrariesVersions.length) { Loading Loading
services/core/java/com/android/server/pm/InstallPackageHelper.java +8 −8 Original line number Diff line number Diff line Loading @@ -1269,10 +1269,9 @@ final class InstallPackageHelper { replace = true; if (DEBUG_INSTALL) Slog.d(TAG, "Replace existing package: " + pkgName); } final AndroidPackage oldPackage = mPm.mPackages.get(pkgName); if (replace && oldPackage != null) { if (replace) { // Prevent apps opting out from runtime permissions final int oldTargetSdk = oldPackage.getTargetSdkVersion(); final int oldTargetSdk = ps.getTargetSdkVersion(); final int newTargetSdk = parsedPackage.getTargetSdkVersion(); if (oldTargetSdk > Build.VERSION_CODES.LOLLIPOP_MR1 && newTargetSdk <= Build.VERSION_CODES.LOLLIPOP_MR1) { Loading @@ -1284,10 +1283,10 @@ final class InstallPackageHelper { + " target SDK " + oldTargetSdk + " does."); } // Prevent persistent apps from being updated if (oldPackage.isPersistent() if (ps.isPersistent() && ((installFlags & PackageManager.INSTALL_STAGED) == 0)) { throw new PrepareFailure(PackageManager.INSTALL_FAILED_INVALID_APK, "Package " + oldPackage.getPackageName() + " is a persistent app. " "Package " + pkgName + " is a persistent app. " + "Persistent apps are not updateable."); } } Loading Loading @@ -1668,7 +1667,7 @@ final class InstallPackageHelper { } // don't allow a system upgrade unless the upgrade hash matches if (oldPackage != null && oldPackage.getRestrictUpdateHash() != null if (oldPackageState.getRestrictUpdateHash() != null && oldPackageState.isSystem()) { final byte[] digestBytes; try { Loading @@ -1684,12 +1683,13 @@ final class InstallPackageHelper { throw new PrepareFailure(INSTALL_FAILED_INVALID_APK, "Could not compute hash: " + pkgName11); } if (!Arrays.equals(oldPackage.getRestrictUpdateHash(), digestBytes)) { if (!Arrays.equals(oldPackageState.getRestrictUpdateHash(), digestBytes)) { throw new PrepareFailure(INSTALL_FAILED_INVALID_APK, "New package fails restrict-update check: " + pkgName11); } // retain upgrade restriction parsedPackage.setRestrictUpdateHash(oldPackage.getRestrictUpdateHash()); parsedPackage.setRestrictUpdateHash( oldPackageState.getRestrictUpdateHash()); } if (oldPackage != null) { Loading
services/core/java/com/android/server/pm/PackageManagerService.java +1 −2 Original line number Diff line number Diff line Loading @@ -1469,8 +1469,7 @@ public class PackageManagerService implements PackageSender, TestUtilityService archPkg.versionCodeMajor = (int) (longVersionCode >> 32); archPkg.versionCode = (int) longVersionCode; // TODO(b/297916136): extract target sdk version. archPkg.targetSdkVersion = MIN_INSTALLABLE_TARGET_SDK; archPkg.targetSdkVersion = ps.getTargetSdkVersion(); // These get translated in flags important for user data management. archPkg.defaultToDeviceProtectedStorage = String.valueOf( Loading
services/core/java/com/android/server/pm/PackageSetting.java +44 −2 File changed.Preview size limit exceeded, changes collapsed. Show changes
services/core/java/com/android/server/pm/ScanPackageUtils.java +4 −2 Original line number Diff line number Diff line Loading @@ -220,7 +220,8 @@ final class ScanPackageUtils { UserManagerService.getInstance(), usesSdkLibraries, parsedPackage.getUsesSdkLibrariesVersionsMajor(), usesStaticLibraries, parsedPackage.getUsesStaticLibrariesVersions(), parsedPackage.getMimeGroups(), newDomainSetId); newDomainSetId, parsedPackage.isPersistent(), parsedPackage.getTargetSdkVersion(), parsedPackage.getRestrictUpdateHash()); } else { // make a deep copy to avoid modifying any existing system state. pkgSetting = new PackageSetting(pkgSetting); Loading @@ -240,7 +241,8 @@ final class ScanPackageUtils { UserManagerService.getInstance(), usesSdkLibraries, parsedPackage.getUsesSdkLibrariesVersionsMajor(), usesStaticLibraries, parsedPackage.getUsesStaticLibrariesVersions(), parsedPackage.getMimeGroups(), newDomainSetId); parsedPackage.getMimeGroups(), newDomainSetId, parsedPackage.isPersistent(), parsedPackage.getTargetSdkVersion(), parsedPackage.getRestrictUpdateHash()); } if (createNewPackage && originalPkgSetting != null) { Loading
services/core/java/com/android/server/pm/Settings.java +16 −5 Original line number Diff line number Diff line Loading @@ -1060,7 +1060,8 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile boolean virtualPreload, boolean isStoppedSystemApp, UserManagerService userManager, String[] usesSdkLibraries, long[] usesSdkLibrariesVersions, String[] usesStaticLibraries, long[] usesStaticLibrariesVersions, Set<String> mimeGroupNames, @NonNull UUID domainSetId) { Set<String> mimeGroupNames, @NonNull UUID domainSetId, boolean isPersistent, int targetSdkVersion, byte[] restrictUpdatedHash) { final PackageSetting pkgSetting; if (originalPkg != null) { if (PackageManagerService.DEBUG_UPGRADE) Log.v(PackageManagerService.TAG, "Package " Loading @@ -1080,7 +1081,10 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile .setUsesStaticLibrariesVersions(usesStaticLibrariesVersions) // Update new package state. .setLastModifiedTime(codePath.lastModified()) .setDomainSetId(domainSetId); .setDomainSetId(domainSetId) .setIsPersistent(isPersistent) .setTargetSdkVersion(targetSdkVersion) .setRestrictUpdateHash(restrictUpdatedHash); pkgSetting.setFlags(pkgFlags) .setPrivateFlags(pkgPrivateFlags); } else { Loading @@ -1092,7 +1096,10 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile null /*cpuAbiOverrideString*/, versionCode, pkgFlags, pkgPrivateFlags, 0 /*sharedUserAppId*/, usesSdkLibraries, usesSdkLibrariesVersions, usesStaticLibraries, usesStaticLibrariesVersions, createMimeGroups(mimeGroupNames), domainSetId); createMimeGroups(mimeGroupNames), domainSetId) .setIsPersistent(isPersistent) .setTargetSdkVersion(targetSdkVersion) .setRestrictUpdateHash(restrictUpdatedHash); pkgSetting.setLastModifiedTime(codePath.lastModified()); if (sharedUser != null) { pkgSetting.setSharedUserAppId(sharedUser.mAppId); Loading Loading @@ -1206,7 +1213,8 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile int pkgPrivateFlags, @NonNull UserManagerService userManager, @Nullable String[] usesSdkLibraries, @Nullable long[] usesSdkLibrariesVersions, @Nullable String[] usesStaticLibraries, @Nullable long[] usesStaticLibrariesVersions, @Nullable Set<String> mimeGroupNames, @NonNull UUID domainSetId) @Nullable Set<String> mimeGroupNames, @NonNull UUID domainSetId, boolean isPersistent, int targetSdkVersion, byte[] restrictUpdatedHash) throws PackageManagerException { final String pkgName = pkgSetting.getPackageName(); if (sharedUser != null) { Loading Loading @@ -1258,7 +1266,10 @@ public final class Settings implements Watchable, Snappable, ResilientAtomicFile pkgSetting.setPrimaryCpuAbi(primaryCpuAbi) .setSecondaryCpuAbi(secondaryCpuAbi) .updateMimeGroups(mimeGroupNames) .setDomainSetId(domainSetId); .setDomainSetId(domainSetId) .setIsPersistent(isPersistent) .setTargetSdkVersion(targetSdkVersion) .setRestrictUpdateHash(restrictUpdatedHash); // Update SDK library dependencies if needed. if (usesSdkLibraries != null && usesSdkLibrariesVersions != null && usesSdkLibraries.length == usesSdkLibrariesVersions.length) { Loading