summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jakob Schneider <jakobschneider@google.com> 2023-11-21 13:14:09 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-11-21 13:14:09 +0000
commit65db10304f062741ded71ebbe9402bf6fce946d5 (patch)
treec7030c12b70d8166fd56bfdb8e11526282c24135
parentbcabede1b3562918d5442458a7637d8f6e53f272 (diff)
parentcb62207ec5003ff693e8099d8f537461da1978ae (diff)
Merge "Prohibit archival of system apps." into main
-rw-r--r--services/core/java/com/android/server/pm/PackageArchiver.java14
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;
}