From 1186eb3fad0b61f9a6dbf027e933fd778cbad4b2 Mon Sep 17 00:00:00 2001 From: Edward Savage-Jones Date: Wed, 27 Sep 2017 13:49:37 +0200 Subject: [PATCH] Block the upgrade of persistent apps Currently when upgrading a persistent app the persistent flag will be silently stripped from the newly installed app, resulting in inconsitent app behaviour. Persistent apps by definiton should not be possible to upgrade via adb or any 3rd party installer. This commit adds a check which will fail the upgrade of an app marked as persistent. Bug: 66889554 Test: Manual - Create an app with the persistent flag set to true, push to /system/priv-app and reboot - Increment the app versionCode, build and install using adb install -r The attempted adb install should fail with: INSTALL_FAILED_INVALID_APK Change-Id: Iaa00addcfbbb2adba319bea96b37e8bfb6e11372 --- .../java/com/android/server/pm/PackageManagerService.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 9f518c3928031..7b4928f97267f 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -17942,6 +17942,13 @@ public class PackageManagerService extends IPackageManager.Stub + " target SDK " + oldTargetSdk + " does."); return; } + // Prevent persistent apps from being updated + if ((oldPackage.applicationInfo.flags & ApplicationInfo.FLAG_PERSISTENT) != 0) { + res.setError(PackageManager.INSTALL_FAILED_INVALID_APK, + "Package " + oldPackage.packageName + " is a persistent app. " + + "Persistent apps are not updateable."); + return; + } // Prevent apps from downgrading their targetSandbox. final int oldTargetSandbox = oldPackage.applicationInfo.targetSandboxVersion; final int newTargetSandbox = pkg.applicationInfo.targetSandboxVersion;