From de8174b3558953bc368bff618f9837a55f0e742c Mon Sep 17 00:00:00 2001 From: Gavin Corkery Date: Fri, 27 Sep 2019 15:02:28 +0100 Subject: [PATCH] Add build fingerprint checks to APK sessions In order to prevent a staged install taking place after receiving an OTA, set the status of a staged session to failed if PackageManagerService.isDeviceUpgrading is true. Bug: 140992644 Test: atest StagedInstallTest#testInstallApkChangingFingerprint Change-Id: I7834bed49b2c7af80f2f07a937f9e15860c13910 --- .../java/com/android/server/pm/PackageInstallerService.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java index b632d18f5cd2f..110d8b6e007b7 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerService.java +++ b/services/core/java/com/android/server/pm/PackageInstallerService.java @@ -259,6 +259,10 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements // Don't hold mSessions lock when calling restoreSession, since it might trigger an APK // atomic install which needs to query sessions, which requires lock on mSessions. for (PackageInstallerSession session : stagedSessionsToRestore) { + if (mPm.isDeviceUpgrading()) { + session.setStagedSessionFailed(SessionInfo.STAGED_SESSION_ACTIVATION_FAILED, + "Build fingerprint has changed"); + } mStagingManager.restoreSession(session); } // Broadcasts are not sent while we restore sessions on boot, since no processes would be