diff options
| author | 2020-06-04 18:56:35 +0100 | |
|---|---|---|
| committer | 2020-07-24 11:59:39 +0100 | |
| commit | b59292eecc1821148db60f7e04c8fe72927bd70e (patch) | |
| tree | f1520eb289b107e5dbefa98883a36acb062e52fd | |
| parent | 16e7b5cfe5d55a9ef151411c679e895fcfa116ff (diff) | |
Create VerificationParams directly
No need for dependency on ActiveInstallSession.
Bug: 159331446
Test: atest GtsSecurityHostTestCases
Test: atest CtsAtomicInstallTestCases
Change-Id: Icd4f43dd2683789e6c034c73fefc128e31dbddaa
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageInstallerSession.java | 27 | ||||
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 60 |
2 files changed, 39 insertions, 48 deletions
diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index b7afa9c1e866..3e172713c270 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -1747,21 +1747,21 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { private void verifyNonStaged(List<PackageInstallerSession> childSessions) throws PackageManagerException { - final PackageManagerService.ActiveInstallSession verifyingSession = - makeSessionActiveForVerification(); + final PackageManagerService.VerificationParams verifyingSession = + makeVerificationParams(); if (verifyingSession == null) { return; } if (isMultiPackage()) { - List<PackageManagerService.ActiveInstallSession> verifyingChildSessions = + List<PackageManagerService.VerificationParams> verifyingChildSessions = new ArrayList<>(childSessions.size()); boolean success = true; PackageManagerException failure = null; for (int i = 0; i < childSessions.size(); ++i) { final PackageInstallerSession session = childSessions.get(i); try { - final PackageManagerService.ActiveInstallSession verifyingChildSession = - session.makeSessionActiveForVerification(); + final PackageManagerService.VerificationParams verifyingChildSession = + session.makeVerificationParams(); if (verifyingChildSession != null) { verifyingChildSessions.add(verifyingChildSession); } @@ -1829,10 +1829,11 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { /** * Stages this session for verification and returns a - * {@link PackageManagerService.ActiveInstallSession} representing this new staged state or null + * {@link PackageManagerService.VerificationParams} representing this new staged state or null * in case permissions need to be requested before verification can proceed. */ - private PackageManagerService.ActiveInstallSession makeSessionActiveForVerification() + @Nullable + private PackageManagerService.VerificationParams makeVerificationParams() throws PackageManagerException { assertNotLocked("makeSessionActive"); @@ -1873,12 +1874,12 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } synchronized (mLock) { - return makeSessionActiveForVerificationLocked(); + return makeVerificationParamsLocked(); } } @GuardedBy("mLock") - private PackageManagerService.ActiveInstallSession makeSessionActiveForVerificationLocked() + private PackageManagerService.VerificationParams makeVerificationParamsLocked() throws PackageManagerException { if (!params.isMultiPackage) { Objects.requireNonNull(mPackageName); @@ -1974,11 +1975,9 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } mRelinquished = true; - // TODO(159331446): create VerificationParams directly by passing information that is - // required for verification only - return new PackageManagerService.ActiveInstallSession(mPackageName, stageDir, - localObserver, sessionId, params, mInstallerUid, mInstallSource, user, - mSigningDetails); + + return mPm.new VerificationParams(user, stageDir, localObserver, params, + mInstallSource, mInstallerUid, mSigningDetails, sessionId); } private void onVerificationComplete() { diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 356d921d28bd..6c37e00dd4d0 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -12869,17 +12869,16 @@ public class PackageManagerService extends IPackageManager.Stub mHandler.sendMessage(msg); } - void verifyStage(ActiveInstallSession activeInstallSession) { - final VerificationParams params = new VerificationParams(activeInstallSession); + void verifyStage(VerificationParams params) { mHandler.post(()-> { params.startCopy(); }); } - void verifyStage(ActiveInstallSession parent, List<ActiveInstallSession> children) + void verifyStage(VerificationParams parent, List<VerificationParams> children) throws PackageManagerException { final MultiPackageVerificationParams params = - new MultiPackageVerificationParams(UserHandle.ALL, parent, children); + new MultiPackageVerificationParams(parent, children); mHandler.post(()-> { params.startCopy(); }); @@ -15052,27 +15051,25 @@ public class PackageManagerService extends IPackageManager.Stub */ class MultiPackageVerificationParams extends HandlerParams { private final IPackageInstallObserver2 mObserver; - private final ArrayList<VerificationParams> mChildParams; + private final List<VerificationParams> mChildParams; private final Map<VerificationParams, Integer> mVerificationState; MultiPackageVerificationParams( - @NonNull UserHandle user, - @NonNull ActiveInstallSession parent, - @NonNull List<ActiveInstallSession> activeInstallSessions) + VerificationParams parent, + List<VerificationParams> children) throws PackageManagerException { - super(user); - if (activeInstallSessions.size() == 0) { + super(parent.getUser()); + if (children.size() == 0) { throw new PackageManagerException("No child sessions found!"); } - mChildParams = new ArrayList<>(activeInstallSessions.size()); - for (int i = 0; i < activeInstallSessions.size(); i++) { - final VerificationParams childParams = - new VerificationParams(activeInstallSessions.get(i)); + mChildParams = children; + // Provide every child with reference to this object as parent + for (int i = 0; i < children.size(); i++) { + final VerificationParams childParams = children.get(i); childParams.mParentVerificationParams = this; - this.mChildParams.add(childParams); } this.mVerificationState = new ArrayMap<>(mChildParams.size()); - mObserver = parent.getObserver(); + mObserver = parent.observer; } @Override @@ -15130,31 +15127,26 @@ public class PackageManagerService extends IPackageManager.Stub private boolean mWaitForEnableRollbackToComplete; private int mRet; - VerificationParams(ActiveInstallSession activeInstallSession) { - super(activeInstallSession.getUser()); - final PackageInstaller.SessionParams sessionParams = - activeInstallSession.getSessionParams(); - if (DEBUG_INSTANT) { - if ((sessionParams.installFlags - & PackageManager.INSTALL_INSTANT_APP) != 0) { - Slog.d(TAG, "Ephemeral install of " + activeInstallSession.getPackageName()); - } - } + VerificationParams(UserHandle user, File stagedDir, IPackageInstallObserver2 observer, + PackageInstaller.SessionParams sessionParams, InstallSource installSource, + int installerUid, SigningDetails signingDetails, int sessionId) { + super(user); + origin = OriginInfo.fromStagedFile(stagedDir); + this.observer = observer; + installFlags = sessionParams.installFlags; + this.installSource = installSource; + packageAbiOverride = sessionParams.abiOverride; verificationInfo = new VerificationInfo( sessionParams.originatingUri, sessionParams.referrerUri, sessionParams.originatingUid, - activeInstallSession.getInstallerUid()); - origin = OriginInfo.fromStagedFile(activeInstallSession.getStagedDir()); - observer = activeInstallSession.getObserver(); - installFlags = sessionParams.installFlags; - installSource = activeInstallSession.getInstallSource(); - packageAbiOverride = sessionParams.abiOverride; - signingDetails = activeInstallSession.getSigningDetails(); + installerUid + ); + this.signingDetails = signingDetails; requiredInstalledVersionCode = sessionParams.requiredInstalledVersionCode; mDataLoaderType = (sessionParams.dataLoaderParams != null) ? sessionParams.dataLoaderParams.getType() : DataLoaderType.NONE; - mSessionId = activeInstallSession.getSessionId(); + mSessionId = sessionId; } @Override |