From 16618cd836ac37c58366a3bb2366318712734216 Mon Sep 17 00:00:00 2001 From: Mohammad Samiul Islam Date: Thu, 22 Aug 2019 15:43:55 +0100 Subject: [PATCH] Allow key downgrade during staged install of apex packages Downgrade is permitted only for the system server initiated sessions. This is enforced by INSTALL_ALLOW_DOWNGRADE flag parameter. Bug: 136002636 Test: atest RollbackManagerHostTest#testApexKeyRotationStagedRollback Change-Id: I0c0e6eaee65a6c77f62425c3929ffa805d1e0f47 Merged-In: I0c0e6eaee65a6c77f62425c3929ffa805d1e0f47 --- .../core/java/com/android/server/pm/StagingManager.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/services/core/java/com/android/server/pm/StagingManager.java b/services/core/java/com/android/server/pm/StagingManager.java index dd1eb8355de12..8d1ed433a8a43 100644 --- a/services/core/java/com/android/server/pm/StagingManager.java +++ b/services/core/java/com/android/server/pm/StagingManager.java @@ -150,6 +150,14 @@ public class StagingManager { return; } + // Verify signing details for downgrade + // Allow downgrading from B to A iff it is possible to upgrade from A to B + if (existingApexPkg.getLongVersionCode() > newApexPkg.getLongVersionCode() + && existingSigningDetails.checkCapability(signingDetails, + PackageParser.SigningDetails.CertCapabilities.INSTALLED_DATA)) { + return; + } + throw new PackageManagerException(SessionInfo.STAGED_SESSION_VERIFICATION_FAILED, "APK-container signature of APEX package " + packageName + " with version " + newApexPkg.versionCodeMajor + " and path " + apexPath + " is not"