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

Commit 954d2778 authored by Louis Chang's avatar Louis Chang
Browse files

[RESTRICT AUTOMERGE] Strip part of the activity info of another uid if no privilege

The activity info could be from another uid which is different
from the app that hosts the task. The information should be
trimmed if the caller app doesn't have the privilege.

However, removing the entire info may result in app compatibility
issues. So, only swiping the info that are sensitive to empty
string.

Bug: 243130512
Test: verified market app locally
Test: atest RecentTasksTest
Change-Id: I5b6775dd3c4e2ccdacd30741884d336b2eaa70da
Merged-In: I5b6775dd3c4e2ccdacd30741884d336b2eaa70da
(cherry picked from commit 5ba72200)
parent 5c6e0c3f
Loading
Loading
Loading
Loading
+30 −3
Original line number Diff line number Diff line
@@ -4168,12 +4168,39 @@ class Task extends WindowContainer<WindowContainer> {

        if (info.topActivityInfo != null
                && task.effectiveUid != info.topActivityInfo.applicationInfo.uid) {
            info.topActivity = null;
            info.topActivityInfo = null;
            // Making a copy to prevent eliminating the info in the original ActivityRecord.
            info.topActivityInfo = new ActivityInfo(info.topActivityInfo);
            info.topActivityInfo.applicationInfo =
                    new ApplicationInfo(info.topActivityInfo.applicationInfo);

            // Strip the sensitive info.
            info.topActivity = new ComponentName("", "");
            info.topActivityInfo.packageName = "";
            info.topActivityInfo.taskAffinity = "";
            info.topActivityInfo.processName = "";
            info.topActivityInfo.name = "";
            info.topActivityInfo.parentActivityName = "";
            info.topActivityInfo.targetActivity = "";
            info.topActivityInfo.splitName = "";
            info.topActivityInfo.applicationInfo.className = "";
            info.topActivityInfo.applicationInfo.credentialProtectedDataDir = "";
            info.topActivityInfo.applicationInfo.dataDir = "";
            info.topActivityInfo.applicationInfo.deviceProtectedDataDir = "";
            info.topActivityInfo.applicationInfo.manageSpaceActivityName = "";
            info.topActivityInfo.applicationInfo.nativeLibraryDir = "";
            info.topActivityInfo.applicationInfo.nativeLibraryRootDir = "";
            info.topActivityInfo.applicationInfo.processName = "";
            info.topActivityInfo.applicationInfo.publicSourceDir = "";
            info.topActivityInfo.applicationInfo.scanPublicSourceDir = "";
            info.topActivityInfo.applicationInfo.scanSourceDir = "";
            info.topActivityInfo.applicationInfo.sourceDir = "";
            info.topActivityInfo.applicationInfo.taskAffinity = "";
            info.topActivityInfo.applicationInfo.name = "";
            info.topActivityInfo.applicationInfo.packageName = "";
        }

        if (task.effectiveUid != baseActivityUid) {
            info.baseActivity = null;
            info.baseActivity = new ComponentName("", "");
        }
    }

+5 −4
Original line number Diff line number Diff line
@@ -1147,10 +1147,11 @@ public class RecentTasksTest extends WindowTestsBase {
    @Test
    public void testCreateRecentTaskInfo_detachedTask() {
        final Task task = createTaskBuilder(".Task").build();
        final ComponentName componentName = new ComponentName("com.foo", ".BarActivity");
        new ActivityBuilder(mSupervisor.mService)
                .setTask(task)
                .setUid(NOBODY_UID)
                .setComponent(new ComponentName("com.foo", ".BarActivity"))
                .setComponent(componentName)
                .build();
        final TaskDisplayArea tda = task.getDisplayArea();

@@ -1166,9 +1167,9 @@ public class RecentTasksTest extends WindowTestsBase {
        info = mRecentTasks.createRecentTaskInfo(task, true /* stripExtras */,
                false /* getTasksAllowed */);

        assertTrue(info.topActivity == null);
        assertTrue(info.topActivityInfo == null);
        assertTrue(info.baseActivity == null);
        assertFalse(info.topActivity.equals(componentName));
        assertFalse(info.topActivityInfo.packageName.equals(componentName.getPackageName()));
        assertFalse(info.baseActivity.equals(componentName));

        // The task can be put in split screen even if it is not attached now.
        task.removeImmediately();