From 595db8a1f3aca45c65e92e8240cafeba13e169f7 Mon Sep 17 00:00:00 2001 From: Alex Buynytskyy Date: Thu, 16 Jan 2020 13:41:00 -0800 Subject: [PATCH] Re-seal the sessions on reboot. Previously we were validating them as well. This is unnecessary as validation will happen on commit/transfer calls later. This was introduced in 43f1af9dd9ce7873d7ede94cc72fc59c7c71283d when we were using mSealed flag for both sealing and validation. It's not the case anymore and we can safely deffer validation to commit/transfer. Test: atest PackageManagerShellCommandTest SplitTests StagedRollbackTest CtsAtomicInstallTestCases PackageInstallerSessionTest InstallSessionTransferTest Bug: b/136132412 Change-Id: Iedba991ff057bcfc4aeb2ba0d450e59bb4f035d8 --- .../android/server/pm/PackageInstallerService.java | 4 ++-- .../android/server/pm/PackageInstallerSession.java | 12 ++++-------- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java index 6331dd46c035d..b1c38d1ebed43 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerService.java +++ b/services/core/java/com/android/server/pm/PackageInstallerService.java @@ -400,10 +400,10 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements } finally { IoUtils.closeQuietly(fis); } - // After all of the sessions were loaded, they are ready to be sealed and validated + // Re-sealing the sealed sessions. for (int i = 0; i < mSessions.size(); ++i) { PackageInstallerSession session = mSessions.valueAt(i); - session.sealAndValidateIfNecessary(); + session.sealIfNecessary(); } } diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index 165bdebe070f6..71555c98f9d21 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -1374,15 +1374,13 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } /** - * If session should be sealed, then it's sealed to prevent further modification - * and then it's validated. - * - * If the session was sealed but something went wrong then it's destroyed. + * If session should be sealed, then it's sealed to prevent further modification. + * If the session can't be sealed then it's destroyed. * *

This is meant to be called after all of the sessions are loaded and added to * PackageInstallerService */ - void sealAndValidateIfNecessary() { + void sealIfNecessary() { synchronized (mLock) { if (!mShouldBeSealed || isStagedAndInTerminalState()) { return; @@ -1391,9 +1389,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { List childSessions = getChildSessions(); synchronized (mLock) { try { - sealAndValidateLocked(childSessions); - } catch (StreamingException e) { - Slog.e(TAG, "Streaming failed", e); + sealLocked(childSessions); } catch (PackageManagerException e) { Slog.e(TAG, "Package not valid", e); }