Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 07d74c4c authored by Songchun Fan's avatar Songchun Fan
Browse files

[RESTRICT AUTOMERGE] Revert "Persist destroyed staged sessions until they are cleaned up"

Revert submission 16575908-dont_abandon_child_qt_dev

Reason for revert:  Reverting CVE-2021-39624 on qt-dev
Reverted Changes:
I4ede6b7a4:Persist destroyed staged sessions until they are c...
Ib0ba9f378:Don't abandon child sessions (1/n)

Change-Id: I50ab96061b2e0fa016a0fbdb5773ccc5f2397ac6
parent 30348d5c
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -659,7 +659,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
        session = new PackageInstallerSession(mInternalCallback, mContext, mPm, this,
                mInstallThread.getLooper(), mStagingManager, sessionId, userId,
                installerPackageName, callingUid, params, createdMillis, stageDir, stageCid, false,
                false, false, false, null, SessionInfo.INVALID_ID, false, false, false,
                false, false, null, SessionInfo.INVALID_ID, false, false, false,
                SessionInfo.STAGED_SESSION_NO_ERROR, "");

        synchronized (mSessions) {
@@ -809,7 +809,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
        synchronized (mSessions) {
            final PackageInstallerSession session = mSessions.get(sessionId);

            return (session != null && !(session.isStaged() && session.isDestroyed()))
            return session != null
                    ? session.generateInfoForCaller(true /*withIcon*/, Binder.getCallingUid())
                    : null;
        }
@@ -830,8 +830,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
        synchronized (mSessions) {
            for (int i = 0; i < mSessions.size(); i++) {
                final PackageInstallerSession session = mSessions.valueAt(i);
                if (session.userId == userId && !session.hasParentSessionId()
                        && !(session.isStaged() && session.isDestroyed())) {
                if (session.userId == userId && !session.hasParentSessionId()) {
                    result.add(session.generateInfoForCaller(false, callingUid));
                }
            }
+5 −16
Original line number Diff line number Diff line
@@ -151,7 +151,6 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
    private static final String ATTR_SESSION_STAGE_CID = "sessionStageCid";
    private static final String ATTR_PREPARED = "prepared";
    private static final String ATTR_COMMITTED = "committed";
    private static final String ATTR_DESTROYED = "destroyed";
    private static final String ATTR_SEALED = "sealed";
    private static final String ATTR_MULTI_PACKAGE = "multiPackage";
    private static final String ATTR_PARENT_SESSION_ID = "parentSessionId";
@@ -414,8 +413,8 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
            PackageSessionProvider sessionProvider, Looper looper, StagingManager stagingManager,
            int sessionId, int userId,
            String installerPackageName, int installerUid, SessionParams params, long createdMillis,
            File stageDir, String stageCid, boolean prepared, boolean committed, boolean destroyed,
            boolean sealed, @Nullable int[] childSessionIds, int parentSessionId, boolean isReady,
            File stageDir, String stageCid, boolean prepared, boolean committed, boolean sealed,
            @Nullable int[] childSessionIds, int parentSessionId, boolean isReady,
            boolean isFailed, boolean isApplied, int stagedSessionErrorCode,
            String stagedSessionErrorMessage) {
        mCallback = callback;
@@ -450,7 +449,6 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {

        mPrepared = prepared;
        mCommitted = committed;
        mDestroyed = destroyed;
        mStagedSessionReady = isReady;
        mStagedSessionFailed = isFailed;
        mStagedSessionApplied = isApplied;
@@ -561,13 +559,6 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
        }
    }

    /** {@hide} */
    boolean isDestroyed() {
        synchronized (mLock) {
            return mDestroyed;
        }
    }

    /** Returns true if a staged session has reached a final state and can be forgotten about  */
    public boolean isStagedAndInTerminalState() {
        synchronized (mLock) {
@@ -2430,7 +2421,7 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
     */
    void write(@NonNull XmlSerializer out, @NonNull File sessionsDir) throws IOException {
        synchronized (mLock) {
            if (mDestroyed && !params.isStaged) {
            if (mDestroyed) {
                return;
            }

@@ -2452,7 +2443,6 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
            }
            writeBooleanAttribute(out, ATTR_PREPARED, isPrepared());
            writeBooleanAttribute(out, ATTR_COMMITTED, isCommitted());
            writeBooleanAttribute(out, ATTR_DESTROYED, isDestroyed());
            writeBooleanAttribute(out, ATTR_SEALED, isSealed());

            writeBooleanAttribute(out, ATTR_MULTI_PACKAGE, params.isMultiPackage);
@@ -2554,7 +2544,6 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
        final String stageCid = readStringAttribute(in, ATTR_SESSION_STAGE_CID);
        final boolean prepared = readBooleanAttribute(in, ATTR_PREPARED, true);
        final boolean committed = readBooleanAttribute(in, ATTR_COMMITTED);
        final boolean destroyed = readBooleanAttribute(in, ATTR_DESTROYED);
        final boolean sealed = readBooleanAttribute(in, ATTR_SEALED);
        final int parentSessionId = readIntAttribute(in, ATTR_PARENT_SESSION_ID,
                SessionInfo.INVALID_ID);
@@ -2642,8 +2631,8 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
        return new PackageInstallerSession(callback, context, pm, sessionProvider,
                installerThread, stagingManager, sessionId, userId, installerPackageName,
                installerUid, params, createdMillis, stageDir, stageCid, prepared, committed,
                destroyed, sealed, childSessionIdsArray, parentSessionId, isReady, isFailed,
                isApplied, stagedSessionErrorCode, stagedSessionErrorMessage);
                sealed, childSessionIdsArray, parentSessionId, isReady, isFailed, isApplied,
                stagedSessionErrorCode, stagedSessionErrorMessage);
    }

    /**
+0 −3
Original line number Diff line number Diff line
@@ -99,9 +99,6 @@ public class StagingManager {
        synchronized (mStagedSessions) {
            for (int i = 0; i < mStagedSessions.size(); i++) {
                final PackageInstallerSession stagedSession = mStagedSessions.valueAt(i);
                if (stagedSession.isDestroyed()) {
                    continue;
                }
                result.add(stagedSession.generateInfoForCaller(false /*icon*/, callingUid));
            }
        }
+0 −1
Original line number Diff line number Diff line
@@ -168,7 +168,6 @@ public class PackageInstallerSessionTest {
                /* stageCid */ null,
                /* prepared */ true,
                /* committed */ true,
                /* destroyed */ staged ? true : false,
                /* sealed */ false,  // Setting to true would trigger some PM logic.
                /* childSessionIds */ childSessionIds != null ? childSessionIds : new int[0],
                /* parentSessionId */ parentSessionId,