From e7d8f7598b2348095b07ea59911dddf2e9994cc3 Mon Sep 17 00:00:00 2001 From: Tad Date: Sat, 29 Apr 2023 11:01:50 -0400 Subject: [PATCH] 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 --- .../353949-backport.patch | 152 ++++++++++++++++++ .../353951-backport.patch | 66 +++++--- .../353958-backport.patch | 60 +++++++ Scripts/LineageOS-17.1/Patch.sh | 2 + 4 files changed, 259 insertions(+), 21 deletions(-) create mode 100644 Patches/LineageOS-17.1/android_frameworks_base/353949-backport.patch create mode 100644 Patches/LineageOS-17.1/android_packages_services_Telecomm/353958-backport.patch diff --git a/Patches/LineageOS-17.1/android_frameworks_base/353949-backport.patch b/Patches/LineageOS-17.1/android_frameworks_base/353949-backport.patch new file mode 100644 index 00000000..2998cd66 --- /dev/null +++ b/Patches/LineageOS-17.1/android_frameworks_base/353949-backport.patch @@ -0,0 +1,152 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Louis Chang +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 mTmpSortedSet = new TreeSet<>(LAST_ACTIVE_TIME_COMPARATOR); + private final ArrayList mTmpStackTasks = new ArrayList<>(); + ++ private boolean mAllowed; ++ + void getTasks(int maxNum, List list, @ActivityType int ignoreActivityType, + @WindowingMode int ignoreWindowingMode, ArrayList activityDisplays, + int callingUid, boolean allowed, boolean crossUser, ArraySet 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. + */ diff --git a/Patches/LineageOS-17.1/android_frameworks_base/353951-backport.patch b/Patches/LineageOS-17.1/android_frameworks_base/353951-backport.patch index 4a741e92..66dffafc 100644 --- a/Patches/LineageOS-17.1/android_frameworks_base/353951-backport.patch +++ b/Patches/LineageOS-17.1/android_frameworks_base/353951-backport.patch @@ -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, diff --git a/Patches/LineageOS-17.1/android_packages_services_Telecomm/353958-backport.patch b/Patches/LineageOS-17.1/android_packages_services_Telecomm/353958-backport.patch new file mode 100644 index 00000000..0fc5b001 --- /dev/null +++ b/Patches/LineageOS-17.1/android_packages_services_Telecomm/353958-backport.patch @@ -0,0 +1,60 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Pranav Madapurmath +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(); + } diff --git a/Scripts/LineageOS-17.1/Patch.sh b/Scripts/LineageOS-17.1/Patch.sh index 5f908e8e..5378dba2 100644 --- a/Scripts/LineageOS-17.1/Patch.sh +++ b/Scripts/LineageOS-17.1/Patch.sh @@ -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;