From 631f6a1b9449fcaccf3b8db5a31b679a512ac803 Mon Sep 17 00:00:00 2001 From: JW Wang Date: Tue, 7 Jul 2020 16:11:36 +0800 Subject: [PATCH] Protect accesses to mParentSessionId (8/n) Bug: 159663586 Test: atest StagedInstallTest AtomicInstallTest Change-Id: I89acee96601d9baf7ec7efd83d63b2d6c67bb8c3 --- .../android/server/pm/PackageInstallerSession.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java index c6a7845677c3c..09d2da646f234 100644 --- a/services/core/java/com/android/server/pm/PackageInstallerSession.java +++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java @@ -1115,7 +1115,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { if (hasParentSessionId()) { throw new IllegalStateException( "Session " + sessionId + " is a child of multi-package session " - + mParentSessionId + " and may not be committed directly."); + + getParentSessionId() + " and may not be committed directly."); } if (!markAsSealed(statusReceiver, forTransfer)) { @@ -2622,7 +2622,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { if (hasParentSessionId()) { throw new IllegalStateException( "Session " + sessionId + " is a child of multi-package session " - + mParentSessionId + " and may not be abandoned directly."); + + getParentSessionId() + " and may not be abandoned directly."); } List childSessions = getChildSessionsNotLocked(); @@ -2848,7 +2848,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } if (hasParentSessionId()) { mSessionProvider.getSession( - mParentSessionId).dispatchStreamValidateAndCommit(); + getParentSessionId()).dispatchStreamValidateAndCommit(); } else { dispatchStreamValidateAndCommit(); } @@ -3030,12 +3030,16 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub { } boolean hasParentSessionId() { - return mParentSessionId != SessionInfo.INVALID_ID; + synchronized (mLock) { + return mParentSessionId != SessionInfo.INVALID_ID; + } } @Override public int getParentSessionId() { - return mParentSessionId; + synchronized (mLock) { + return mParentSessionId; + } } private void dispatchSessionFinished(int returnCode, String msg, Bundle extras) {