diff options
author | 2023-11-07 15:14:50 +0000 | |
---|---|---|
committer | 2023-11-20 18:12:23 +0000 | |
commit | cb62207ec5003ff693e8099d8f537461da1978ae (patch) | |
tree | 2aa11f8897da8aaf482eebb56d3b08ef9a052e8e | |
parent | a712057a79c13510d091bf2cc23c651efa83c48b (diff) |
Prohibit archival of system apps.
Bug: 299299569
Test: PackageInstallerArchiveTest
Change-Id: I0b94f13e5d81323a7e01479fdda2dadf67574720
-rw-r--r-- | services/core/java/com/android/server/pm/PackageArchiver.java | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/pm/PackageArchiver.java b/services/core/java/com/android/server/pm/PackageArchiver.java index 1a702227c3f3..d2a4c2713097 100644 --- a/services/core/java/com/android/server/pm/PackageArchiver.java +++ b/services/core/java/com/android/server/pm/PackageArchiver.java @@ -37,6 +37,7 @@ import android.app.BroadcastOptions; import android.content.Context; import android.content.Intent; import android.content.IntentSender; +import android.content.pm.ApplicationInfo; import android.content.pm.ArchivedActivityParcel; import android.content.pm.ArchivedPackageParcel; import android.content.pm.LauncherActivityInfo; @@ -184,6 +185,7 @@ public class PackageArchiver { throws PackageManager.NameNotFoundException { PackageStateInternal ps = getPackageState(packageName, mPm.snapshotComputer(), Binder.getCallingUid(), userId); + verifyNotSystemApp(ps.getFlags()); String responsibleInstallerPackage = getResponsibleInstallerPackage(ps); verifyInstaller(responsibleInstallerPackage, userId); verifyOptOutStatus(packageName, @@ -318,6 +320,13 @@ public class PackageArchiver { return intentReceivers != null && !intentReceivers.getList().isEmpty(); } + private void verifyNotSystemApp(int flags) throws PackageManager.NameNotFoundException { + if ((flags & ApplicationInfo.FLAG_SYSTEM) != 0 || ( + (flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0)) { + throw new PackageManager.NameNotFoundException("System apps cannot be archived."); + } + } + /** * Returns true if the app is archivable. */ @@ -339,6 +348,11 @@ public class PackageArchiver { throw new ParcelableException(e); } + if ((ps.getFlags() & ApplicationInfo.FLAG_SYSTEM) != 0 || ( + (ps.getFlags() & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0)) { + return false; + } + if (isAppOptedOutOfArchiving(packageName, ps.getAppId())) { return false; } |