mirror of
https://github.com/Divested-Mobile/DivestOS-Build.git
synced 2024-10-01 01:35:54 -04:00
17.1 extra backports, credit @Flamefire
Includes 2 extra patches from https://github.com/Flamefire/android_device_sony_lilac/tree/lineage-17.1/patches/asb-2023-04 Santiy checked patches against https://github.com/Flamefire/android_device_sony_lilac/tree/lineage-17.1/patches/asb-2023-03 Signed-off-by: Tad <tad@spotco.us>
This commit is contained in:
parent
ab4eceb830
commit
e7d8f7598b
@ -0,0 +1,152 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Louis Chang <louischang@google.com>
|
||||
Date: Wed, 28 Sep 2022 06:46:29 +0000
|
||||
Subject: [PATCH] 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 5ba72200f6a66b5da48c9c3abd103a73aea1ef95)
|
||||
(cherry picked from commit e534fa2a7119f39cb76f1d08557b7dcae3b6d94e)
|
||||
(cherry picked from commit 20fc1c7244cdf840e4a6cbfa71904b4d608bb093)
|
||||
Merged-In: I5b6775dd3c4e2ccdacd30741884d336b2eaa70da
|
||||
---
|
||||
.../com/android/server/wm/AppTaskImpl.java | 3 +-
|
||||
.../com/android/server/wm/RecentTasks.java | 8 +++--
|
||||
.../com/android/server/wm/RunningTasks.java | 7 ++++
|
||||
.../com/android/server/wm/TaskRecord.java | 34 +++++++++++++++++++
|
||||
4 files changed, 49 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/services/core/java/com/android/server/wm/AppTaskImpl.java b/services/core/java/com/android/server/wm/AppTaskImpl.java
|
||||
index f221c3a4573f..e12c8259d8a7 100644
|
||||
--- a/services/core/java/com/android/server/wm/AppTaskImpl.java
|
||||
+++ b/services/core/java/com/android/server/wm/AppTaskImpl.java
|
||||
@@ -84,7 +84,8 @@ class AppTaskImpl extends IAppTask.Stub {
|
||||
if (tr == null) {
|
||||
throw new IllegalArgumentException("Unable to find task ID " + mTaskId);
|
||||
}
|
||||
- return mService.getRecentTasks().createRecentTaskInfo(tr);
|
||||
+ return mService.getRecentTasks().createRecentTaskInfo(tr,
|
||||
+ true /* getTasksAllowed */);
|
||||
} finally {
|
||||
Binder.restoreCallingIdentity(origId);
|
||||
}
|
||||
diff --git a/services/core/java/com/android/server/wm/RecentTasks.java b/services/core/java/com/android/server/wm/RecentTasks.java
|
||||
index 541a8bbc8865..67fb4c28cf22 100644
|
||||
--- a/services/core/java/com/android/server/wm/RecentTasks.java
|
||||
+++ b/services/core/java/com/android/server/wm/RecentTasks.java
|
||||
@@ -944,7 +944,7 @@ class RecentTasks {
|
||||
continue;
|
||||
}
|
||||
|
||||
- final ActivityManager.RecentTaskInfo rti = createRecentTaskInfo(tr);
|
||||
+ final ActivityManager.RecentTaskInfo rti = createRecentTaskInfo(tr, getTasksAllowed);
|
||||
if (!getDetailedTasks) {
|
||||
rti.baseIntent.replaceExtras((Bundle) null);
|
||||
}
|
||||
@@ -1715,12 +1715,16 @@ class RecentTasks {
|
||||
/**
|
||||
* Creates a new RecentTaskInfo from a TaskRecord.
|
||||
*/
|
||||
- ActivityManager.RecentTaskInfo createRecentTaskInfo(TaskRecord tr) {
|
||||
+ ActivityManager.RecentTaskInfo createRecentTaskInfo(TaskRecord tr,
|
||||
+ boolean getTasksAllowed) {
|
||||
ActivityManager.RecentTaskInfo rti = new ActivityManager.RecentTaskInfo();
|
||||
tr.fillTaskInfo(rti);
|
||||
// Fill in some deprecated values
|
||||
rti.id = rti.isRunning ? rti.taskId : INVALID_TASK_ID;
|
||||
rti.persistentId = rti.taskId;
|
||||
+ if (!getTasksAllowed) {
|
||||
+ TaskRecord.trimIneffectiveInfo(tr, rti);
|
||||
+ }
|
||||
return rti;
|
||||
}
|
||||
|
||||
diff --git a/services/core/java/com/android/server/wm/RunningTasks.java b/services/core/java/com/android/server/wm/RunningTasks.java
|
||||
index 81a85476c53a..16d041a7a1c0 100644
|
||||
--- a/services/core/java/com/android/server/wm/RunningTasks.java
|
||||
+++ b/services/core/java/com/android/server/wm/RunningTasks.java
|
||||
@@ -39,6 +39,8 @@ class RunningTasks {
|
||||
private final TreeSet<TaskRecord> mTmpSortedSet = new TreeSet<>(LAST_ACTIVE_TIME_COMPARATOR);
|
||||
private final ArrayList<TaskRecord> mTmpStackTasks = new ArrayList<>();
|
||||
|
||||
+ private boolean mAllowed;
|
||||
+
|
||||
void getTasks(int maxNum, List<RunningTaskInfo> list, @ActivityType int ignoreActivityType,
|
||||
@WindowingMode int ignoreWindowingMode, ArrayList<ActivityDisplay> activityDisplays,
|
||||
int callingUid, boolean allowed, boolean crossUser, ArraySet<Integer> profileIds) {
|
||||
@@ -49,6 +51,7 @@ class RunningTasks {
|
||||
|
||||
// Gather all of the tasks across all of the tasks, and add them to the sorted set
|
||||
mTmpSortedSet.clear();
|
||||
+ mAllowed = allowed;
|
||||
final int numDisplays = activityDisplays.size();
|
||||
for (int displayNdx = 0; displayNdx < numDisplays; ++displayNdx) {
|
||||
final ActivityDisplay display = activityDisplays.get(displayNdx);
|
||||
@@ -82,6 +85,10 @@ class RunningTasks {
|
||||
task.fillTaskInfo(rti);
|
||||
// Fill in some deprecated values
|
||||
rti.id = rti.taskId;
|
||||
+
|
||||
+ if (!mAllowed) {
|
||||
+ TaskRecord.trimIneffectiveInfo(task, rti);
|
||||
+ }
|
||||
return rti;
|
||||
}
|
||||
}
|
||||
diff --git a/services/core/java/com/android/server/wm/TaskRecord.java b/services/core/java/com/android/server/wm/TaskRecord.java
|
||||
index 361f66e3106a..78d13e95df81 100644
|
||||
--- a/services/core/java/com/android/server/wm/TaskRecord.java
|
||||
+++ b/services/core/java/com/android/server/wm/TaskRecord.java
|
||||
@@ -2436,6 +2436,40 @@ class TaskRecord extends ConfigurationContainer {
|
||||
info.configuration.setTo(getConfiguration());
|
||||
}
|
||||
|
||||
+ /**
|
||||
+ * Removes the activity info if the activity belongs to a different uid, which is
|
||||
+ * different from the app that hosts the task.
|
||||
+ */
|
||||
+ static void trimIneffectiveInfo(TaskRecord task, TaskInfo info) {
|
||||
+ int topActivityUid = task.effectiveUid;
|
||||
+ for (int i = task.mActivities.size() - 1; i >= 0; --i) {
|
||||
+ final ActivityRecord r = task.mActivities.get(i);
|
||||
+ if (r.finishing || r.isState(ActivityState.INITIALIZING)) {
|
||||
+ continue;
|
||||
+ }
|
||||
+ topActivityUid = r.info.applicationInfo.uid;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (task.effectiveUid != topActivityUid) {
|
||||
+ info.topActivity = new ComponentName("", "");
|
||||
+ }
|
||||
+
|
||||
+ int baseActivityUid = task.effectiveUid;
|
||||
+ for (int i = 0; i < task.mActivities.size(); ++i) {
|
||||
+ final ActivityRecord r = task.mActivities.get(i);
|
||||
+ if (r.finishing) {
|
||||
+ continue;
|
||||
+ }
|
||||
+ baseActivityUid = r.info.applicationInfo.uid;
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (task.effectiveUid != baseActivityUid) {
|
||||
+ info.baseActivity = new ComponentName("", "");
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
/**
|
||||
* Returns a {@link TaskInfo} with information from this task.
|
||||
*/
|
@ -21,10 +21,10 @@ Change-Id: I9b6f801d69ea6d2244a38dbe689e81afa4e798bf
|
||||
Merged-In: I9b6f801d69ea6d2244a38dbe689e81afa4e798bf
|
||||
---
|
||||
core/java/android/content/IntentSender.java | 42 ++++++++++++++++++-
|
||||
.../server/pm/PackageInstallerService.java | 11 ++++-
|
||||
.../server/pm/PackageInstallerService.java | 21 ++++++++--
|
||||
.../server/pm/PackageInstallerSession.java | 19 +++++++--
|
||||
.../server/pm/PackageManagerService.java | 10 ++++-
|
||||
4 files changed, 73 insertions(+), 9 deletions(-)
|
||||
4 files changed, 81 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/core/java/android/content/IntentSender.java b/core/java/android/content/IntentSender.java
|
||||
index ec0bac486c65..0ef0a71fffe0 100644
|
||||
@ -103,7 +103,7 @@ index ec0bac486c65..0ef0a71fffe0 100644
|
||||
throw new SendIntentException();
|
||||
}
|
||||
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java
|
||||
index c73f489cb143..ee0cd1f2ea23 100644
|
||||
index c73f489cb143..ea144fd7c4d5 100644
|
||||
--- a/services/core/java/com/android/server/pm/PackageInstallerService.java
|
||||
+++ b/services/core/java/com/android/server/pm/PackageInstallerService.java
|
||||
@@ -23,6 +23,7 @@ import android.Manifest;
|
||||
@ -114,19 +114,7 @@ index c73f489cb143..ee0cd1f2ea23 100644
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PackageDeleteObserver;
|
||||
@@ -1046,7 +1047,10 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
|
||||
PackageManager.deleteStatusToString(returnCode, msg));
|
||||
fillIn.putExtra(PackageInstaller.EXTRA_LEGACY_STATUS, returnCode);
|
||||
try {
|
||||
- mTarget.sendIntent(mContext, 0, fillIn, null, null);
|
||||
+ final BroadcastOptions options = BroadcastOptions.makeBasic();
|
||||
+ options.setPendingIntentBackgroundActivityLaunchAllowed(false);
|
||||
+ mTarget.sendIntent(mContext, 0, fillIn, null /* onFinished*/,
|
||||
+ null /* handler */, null /* requiredPermission */, options.toBundle());
|
||||
} catch (SendIntentException ignored) {
|
||||
}
|
||||
}
|
||||
@@ -1076,7 +1080,10 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
|
||||
@@ -1021,7 +1022,10 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
|
||||
PackageInstaller.STATUS_PENDING_USER_ACTION);
|
||||
fillIn.putExtra(Intent.EXTRA_INTENT, intent);
|
||||
try {
|
||||
@ -134,22 +122,58 @@ index c73f489cb143..ee0cd1f2ea23 100644
|
||||
+ final BroadcastOptions options = BroadcastOptions.makeBasic();
|
||||
+ options.setPendingIntentBackgroundActivityLaunchAllowed(false);
|
||||
+ mTarget.sendIntent(mContext, 0, fillIn, null /* onFinished*/,
|
||||
+ null /* handler */, null /* requiredPermission */, options.toBundle());
|
||||
} catch (SendIntentException ignored) {
|
||||
}
|
||||
}
|
||||
@@ -1046,7 +1050,10 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
|
||||
PackageManager.deleteStatusToString(returnCode, msg));
|
||||
fillIn.putExtra(PackageInstaller.EXTRA_LEGACY_STATUS, returnCode);
|
||||
try {
|
||||
- mTarget.sendIntent(mContext, 0, fillIn, null, null);
|
||||
+ final BroadcastOptions options = BroadcastOptions.makeBasic();
|
||||
+ options.setPendingIntentBackgroundActivityLaunchAllowed(false);
|
||||
+ mTarget.sendIntent(mContext, 0, fillIn, null /* onFinished*/,
|
||||
+ null /* handler */, null /* requiredPermission */, options.toBundle());
|
||||
} catch (SendIntentException ignored) {
|
||||
}
|
||||
}
|
||||
@@ -1076,7 +1083,10 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
|
||||
PackageInstaller.STATUS_PENDING_USER_ACTION);
|
||||
fillIn.putExtra(Intent.EXTRA_INTENT, intent);
|
||||
try {
|
||||
- mTarget.sendIntent(mContext, 0, fillIn, null, null);
|
||||
+ final BroadcastOptions options = BroadcastOptions.makeBasic();
|
||||
+ options.setPendingIntentBackgroundActivityLaunchAllowed(false);
|
||||
+ mTarget.sendIntent(mContext, 0, fillIn, null /* onFinished*/,
|
||||
+ null /* handler */, null /* requiredPermission */, options.toBundle());
|
||||
} catch (SendIntentException ignored) {
|
||||
}
|
||||
}
|
||||
@@ -1116,7 +1126,10 @@ public class PackageInstallerService extends IPackageInstaller.Stub implements
|
||||
}
|
||||
}
|
||||
try {
|
||||
- mTarget.sendIntent(mContext, 0, fillIn, null, null);
|
||||
+ final BroadcastOptions options = BroadcastOptions.makeBasic();
|
||||
+ options.setPendingIntentBackgroundActivityLaunchAllowed(false);
|
||||
+ mTarget.sendIntent(mContext, 0, fillIn, null /* onFinished*/,
|
||||
+ null /* handler */, null /* requiredPermission */, options.toBundle());
|
||||
} catch (SendIntentException ignored) {
|
||||
}
|
||||
}
|
||||
diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java
|
||||
index 5a880cb5fa52..b03f06ffd859 100644
|
||||
index 5a880cb5fa52..71d06d8a2d03 100644
|
||||
--- a/services/core/java/com/android/server/pm/PackageInstallerSession.java
|
||||
+++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java
|
||||
@@ -46,6 +46,7 @@ import android.annotation.NonNull;
|
||||
@@ -44,6 +44,7 @@ import static com.android.server.pm.PackageInstallerService.prepareStageDir;
|
||||
import android.Manifest;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
+import android.app.BroadcastOptions;
|
||||
import android.app.admin.DevicePolicyEventLogger;
|
||||
import android.app.admin.DevicePolicyManagerInternal;
|
||||
+import android.app.BroadcastOptions;
|
||||
import android.content.Context;
|
||||
import android.content.IIntentReceiver;
|
||||
import android.content.IIntentSender;
|
||||
@@ -960,13 +961,21 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
||||
try {
|
||||
intent.putExtra(PackageInstaller.EXTRA_SESSION_ID,
|
||||
|
@ -0,0 +1,60 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Pranav Madapurmath <pmadapurmath@google.com>
|
||||
Date: Wed, 1 Feb 2023 21:33:16 +0000
|
||||
Subject: [PATCH] Ensure service unbind when receiving a null call screening
|
||||
service in onBind.
|
||||
|
||||
Currently, we do not unbind the call screening service when a null
|
||||
service is returned from onBind when placing MO calls.
|
||||
CallScreeningServiceHelper (MO) now overrides onNullBinding to ensure
|
||||
future completion and that we unbind the service after. Similarly, we
|
||||
need to unbind the service in onServiceDisconnected.
|
||||
CallScreeningServiceFilter (MT) has also been updated to ensure we
|
||||
unbind in places when we know that the connection should not exist.
|
||||
|
||||
Also, there is a timeout in CallScreeningServiceHelper. This does not
|
||||
require a call to unbind the service because CallScreeningAdapter also
|
||||
places a call to unbind the service in onScreeningResponse. We would
|
||||
risk having duplicate calls to unbind the service, which would cause a
|
||||
fatal exception. This is demonstrated by the existing CTS tests, namely,
|
||||
ThirdPartyCallScreeningServiceTest.java.
|
||||
|
||||
Bug: 252762941
|
||||
Test: Manual (no breakage in existing flow), CTS for MO/MT cases
|
||||
Change-Id: Ia5b62bb93dc666b6b8b8daccb8ef41eb55dde7ea
|
||||
Merged-In: Ia5b62bb93dc666b6b8b8daccb8ef41eb55dde7ea
|
||||
(cherry picked from commit 14927c6f0b4154ee31dc4e339ea4a692f73ad2e0)
|
||||
(cherry picked from commit 60f4ee794adbac4950ab22b44c4630edf7239e12)
|
||||
Merged-In: Ia5b62bb93dc666b6b8b8daccb8ef41eb55dde7ea
|
||||
---
|
||||
.../telecom/CallScreeningServiceHelper.java | 17 +++++++++++++++++
|
||||
1 file changed, 17 insertions(+)
|
||||
|
||||
diff --git a/src/com/android/server/telecom/CallScreeningServiceHelper.java b/src/com/android/server/telecom/CallScreeningServiceHelper.java
|
||||
index a9341ab82..89778e43a 100644
|
||||
--- a/src/com/android/server/telecom/CallScreeningServiceHelper.java
|
||||
+++ b/src/com/android/server/telecom/CallScreeningServiceHelper.java
|
||||
@@ -146,6 +146,23 @@ public class CallScreeningServiceHelper {
|
||||
"Cancelling outgoing call screen due to service disconnect.");
|
||||
}
|
||||
mFuture.complete(null);
|
||||
+ mContext.unbindService(this);
|
||||
+ } finally {
|
||||
+ Log.endSession();
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ @Override
|
||||
+ public void onNullBinding(ComponentName name) {
|
||||
+ // No locking needed -- CompletableFuture only lets one thread call complete.
|
||||
+ Log.continueSession(mLoggingSession, "CSSH.oNB");
|
||||
+ try {
|
||||
+ if (!mFuture.isDone()) {
|
||||
+ Log.w(CallScreeningServiceHelper.this,
|
||||
+ "Cancelling outgoing call screen due to null binding.");
|
||||
+ }
|
||||
+ mFuture.complete(null);
|
||||
+ mContext.unbindService(this);
|
||||
} finally {
|
||||
Log.endSession();
|
||||
}
|
@ -150,6 +150,7 @@ applyPatch "$DOS_PATCHES/android_frameworks_base/353945.patch"; #R_asb_2023-04 C
|
||||
applyPatch "$DOS_PATCHES/android_frameworks_base/353946.patch"; #R_asb_2023-04 Fix checkKeyIntentParceledCorrectly's bypass
|
||||
applyPatch "$DOS_PATCHES/android_frameworks_base/353947.patch"; #R_asb_2023-04 Encode Intent scheme when serializing to URI string
|
||||
applyPatch "$DOS_PATCHES/android_frameworks_base/353948-backport.patch"; #R_asb_2023-04 Backport BAL restrictions from S to R, this blocks apps from using AlarmManager to bypass BAL restrictions.
|
||||
applyPatch "$DOS_PATCHES/android_frameworks_base/353949-backport.patch"; #R_asb_2023-04 Strip part of the activity info of another uid if no privilege
|
||||
applyPatch "$DOS_PATCHES/android_frameworks_base/353950-backport.patch"; #R_asb_2023-04 Add a limit on channel group creation
|
||||
applyPatch "$DOS_PATCHES/android_frameworks_base/353951-backport.patch"; #R_asb_2023-04 Fix bypass BG-FGS and BAL via package manager APIs #XXX
|
||||
#applyPatch "$DOS_PATCHES/android_frameworks_base/272645.patch"; #ten-bt-sbc-hd-dualchannel: Add CHANNEL_MODE_DUAL_CHANNEL constant (ValdikSS)
|
||||
@ -384,6 +385,7 @@ fi;
|
||||
#fi;
|
||||
|
||||
if enterAndClear "packages/services/Telecomm"; then
|
||||
applyPatch "$DOS_PATCHES/android_packages_services_Telecomm/353958-backport.patch"; #R_asb_2023-04 Ensure service unbind when receiving a null call screening service in onBind.
|
||||
applyPatch "$DOS_PATCHES/android_packages_services_Telecomm/353959.patch"; #R_asb_2023-04 Do not process content uri in call Intents
|
||||
fi;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user