diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index 67b948f72d840..2e0022289f92a 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -380,6 +380,14 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { @GuardedBy("mLock") private boolean mStageDirInUse = false; + /** + * True if the verification is already in progress. This is used to prevent running + * verification again while one is already in progress which will break internal states. + * + * Worker thread only. + */ + private boolean mVerificationInProgress = false; + /** Permissions have been accepted by the user (see {@link #setPermissionsResult}) */ @GuardedBy("mLock") private boolean mPermissionsManuallyAccepted = false; @@ -2201,6 +2209,12 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { activate(); } + if (mVerificationInProgress) { + Slog.w(TAG, "Verification is already in progress for session " + sessionId); + return; + } + mVerificationInProgress = true; + if (params.isStaged) { mStagedSession.verifySession(); } else {