Revert "Use calling package name for CompatChange."

This revert was created by Android Culprit Assistant. The culprit was identified in the following culprit search session (http://go/aca-get/5ef59e99-751a-4b18-b75e-c303809306bd).

Bug: 282503613
Change-Id: I75b6583c115426dd3539d236043a889df9c930db
This commit is contained in:
Android Culprit Assistant
2023-05-15 08:17:39 +00:00
committed by Ravi Jain
parent 35252ce578
commit a60531cb40
5 changed files with 16 additions and 70 deletions

View File

@@ -348,22 +348,21 @@ public final class PendingIntentRecord extends IIntentSender.Stub {
* use caller's BAL permission.
*/
public static BackgroundStartPrivileges getBackgroundStartPrivilegesAllowedByCaller(
@Nullable ActivityOptions activityOptions, int callingUid,
@Nullable String callingPackage) {
@Nullable ActivityOptions activityOptions, int callingUid) {
if (activityOptions == null) {
// since the ActivityOptions were not created by the app itself, determine the default
// for the app
return getDefaultBackgroundStartPrivileges(callingUid, callingPackage);
return getDefaultBackgroundStartPrivileges(callingUid);
}
return getBackgroundStartPrivilegesAllowedByCaller(activityOptions.toBundle(),
callingUid, callingPackage);
callingUid);
}
private static BackgroundStartPrivileges getBackgroundStartPrivilegesAllowedByCaller(
@Nullable Bundle options, int callingUid, @Nullable String callingPackage) {
@Nullable Bundle options, int callingUid) {
if (options == null || !options.containsKey(
ActivityOptions.KEY_PENDING_INTENT_BACKGROUND_ACTIVITY_ALLOWED)) {
return getDefaultBackgroundStartPrivileges(callingUid, callingPackage);
return getDefaultBackgroundStartPrivileges(callingUid);
}
return options.getBoolean(ActivityOptions.KEY_PENDING_INTENT_BACKGROUND_ACTIVITY_ALLOWED)
? BackgroundStartPrivileges.ALLOW_BAL
@@ -382,10 +381,8 @@ public final class PendingIntentRecord extends IIntentSender.Stub {
android.Manifest.permission.LOG_COMPAT_CHANGE
})
public static BackgroundStartPrivileges getDefaultBackgroundStartPrivileges(
int callingUid, @Nullable String callingPackage) {
boolean isChangeEnabledForApp = callingPackage != null ? CompatChanges.isChangeEnabled(
DEFAULT_RESCIND_BAL_PRIVILEGES_FROM_PENDING_INTENT_SENDER, callingPackage,
UserHandle.getUserHandleForUid(callingUid)) : CompatChanges.isChangeEnabled(
int callingUid) {
boolean isChangeEnabledForApp = CompatChanges.isChangeEnabled(
DEFAULT_RESCIND_BAL_PRIVILEGES_FROM_PENDING_INTENT_SENDER, callingUid);
if (isChangeEnabledForApp) {
return BackgroundStartPrivileges.ALLOW_FGS;
@@ -641,7 +638,7 @@ public final class PendingIntentRecord extends IIntentSender.Stub {
// temporarily allow receivers and services to open activities from background if the
// PendingIntent.send() caller was foreground at the time of sendInner() call
if (uid != callingUid && controller.mAtmInternal.isUidForeground(callingUid)) {
return getBackgroundStartPrivilegesAllowedByCaller(options, callingUid, null);
return getBackgroundStartPrivilegesAllowedByCaller(options, callingUid);
}
return BackgroundStartPrivileges.NONE;
}

View File

@@ -5334,54 +5334,15 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
return null;
}
/**
* Returns the {@link WindowProcessController} for the app process for the given uid and pid.
*
* If no such {@link WindowProcessController} is found, it does not belong to an app, or the
* pid does not match the uid {@code null} is returned.
*/
@Nullable WindowProcessController getProcessController(int pid, int uid) {
return UserHandle.isApp(uid) ? getProcessControllerInternal(pid, uid) : null;
}
/**
* Returns the {@link WindowProcessController} for the given uid and pid.
*
* If no such {@link WindowProcessController} is found or the pid does not match the uid
* {@code null} is returned.
*/
private @Nullable WindowProcessController getProcessControllerInternal(int pid, int uid) {
WindowProcessController getProcessController(int pid, int uid) {
final WindowProcessController proc = mProcessMap.getProcess(pid);
if (proc == null) {
return null;
}
if (proc.mUid == uid) {
if (proc == null) return null;
if (UserHandle.isApp(uid) && proc.mUid == uid) {
return proc;
}
return null;
}
/**
* Returns the package name if (and only if) the package name can be uniquely determined.
* Otherwise returns {@code null}.
*
* The provided pid must match the provided uid, otherwise this also returns null.
*/
@Nullable String getPackageNameIfUnique(int uid, int pid) {
WindowProcessController processController = getProcessControllerInternal(pid, uid);
if (processController == null) {
Slog.w(TAG, "callingPackage for (uid=" + uid + ", pid=" + pid + ") has no WPC");
return null;
}
List<String> realCallingPackages = processController.getPackageList();
if (realCallingPackages.size() == 1) {
return realCallingPackages.get(0);
}
Slog.w(TAG, "callingPackage for (uid=" + uid + ", pid=" + pid + ") is ambiguous: "
+ realCallingPackages);
return null;
}
/** A uid is considered to be foreground if it has a visible non-toast window. */
@HotPath(caller = HotPath.START_SERVICE)
boolean hasActiveVisibleWindow(int uid) {

View File

@@ -180,8 +180,7 @@ public class BackgroundActivityStartController {
Intent intent,
ActivityOptions checkedOptions) {
return checkBackgroundActivityStart(callingUid, callingPid, callingPackage,
realCallingUid, realCallingPid,
callerApp, originatingPendingIntent,
realCallingUid, realCallingPid, callerApp, originatingPendingIntent,
backgroundStartPrivileges, intent, checkedOptions) == BAL_BLOCK;
}
@@ -289,13 +288,11 @@ public class BackgroundActivityStartController {
}
}
String realCallingPackage = mService.getPackageNameIfUnique(realCallingUid, realCallingPid);
// Legacy behavior allows to use caller foreground state to bypass BAL restriction.
// The options here are the options passed by the sender and not those on the intent.
final BackgroundStartPrivileges balAllowedByPiSender =
PendingIntentRecord.getBackgroundStartPrivilegesAllowedByCaller(
checkedOptions, realCallingUid, realCallingPackage);
checkedOptions, realCallingUid);
final boolean logVerdictChangeByPiDefaultChange = checkedOptions == null
|| checkedOptions.getPendingIntentBackgroundActivityStartMode()
@@ -455,11 +452,8 @@ public class BackgroundActivityStartController {
// If we are here, it means all exemptions not based on PI sender failed, so we'll block
// unless resultIfPiSenderAllowsBal is an allow and the PI sender allows BAL
if (realCallingPackage == null) {
realCallingPackage = (callingUid == realCallingUid ? callingPackage :
mService.mContext.getPackageManager().getNameForUid(realCallingUid))
+ "[debugOnly]";
}
String realCallingPackage = callingUid == realCallingUid ? callingPackage :
mService.mContext.getPackageManager().getNameForUid(realCallingUid);
String stateDumpLog = " [callingPackage: " + callingPackage
+ "; callingUid: " + callingUid

View File

@@ -721,12 +721,6 @@ public class WindowProcessController extends ConfigurationContainer<Configuratio
}
}
List<String> getPackageList() {
synchronized (mPkgList) {
return new ArrayList<>(mPkgList);
}
}
void addActivityIfNeeded(ActivityRecord r) {
// even if we already track this activity, note down that it has been launched
setLastActivityLaunchTime(r);

View File

@@ -928,7 +928,7 @@ public class ActivityStarterTests extends WindowTestsBase {
anyInt(), anyInt()));
doReturn(BackgroundStartPrivileges.allowBackgroundActivityStarts(null)).when(
() -> PendingIntentRecord.getBackgroundStartPrivilegesAllowedByCaller(
anyObject(), anyInt(), anyObject()));
anyObject(), anyInt()));
runAndVerifyBackgroundActivityStartsSubtest(
"allowed_notAborted", false,
UNIMPORTANT_UID, false, PROCESS_STATE_BOUND_TOP,