From ef93e8a503fc1aa3bd9ff0cd37cd76261c6c80aa Mon Sep 17 00:00:00 2001 From: Sudheer Shanka Date: Fri, 3 Jan 2025 12:37:17 -0800 Subject: Allow root uid to listen for uid state changes across users. ActivityManager.checkUidPermission() doesn't exempt root uids similar to other permission checking methods. While we investigate why, switch to a different permission checking method. Bug: 385438310 Test: atest ./tests/app/src/android/app/cts/ActivityManagerFgsBgStartTest.java Flag: EXEMPT bugfix Change-Id: I6f254f08f3dafe0156f2f6a77f3ef7ad461a0e65 --- .../core/java/com/android/server/am/UidObserverController.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/am/UidObserverController.java b/services/core/java/com/android/server/am/UidObserverController.java index 7eeec32cf24a..f58e3f85bb26 100644 --- a/services/core/java/com/android/server/am/UidObserverController.java +++ b/services/core/java/com/android/server/am/UidObserverController.java @@ -31,6 +31,7 @@ import android.os.Binder; import android.os.Handler; import android.os.IBinder; import android.os.Message; +import android.os.Process; import android.os.RemoteCallbackList; import android.os.RemoteException; import android.os.SystemClock; @@ -90,10 +91,12 @@ public class UidObserverController { + UUID.randomUUID().toString()); synchronized (mLock) { + final boolean canInteractAcrossUsers = ActivityManager.checkComponentPermission( + INTERACT_ACROSS_USERS_FULL, callingUid, Process.INVALID_UID, true) + == PackageManager.PERMISSION_GRANTED; mUidObservers.register(observer, new UidObserverRegistration(callingUid, callingPackage, which, cutpoint, - ActivityManager.checkUidPermission(INTERACT_ACROSS_USERS_FULL, callingUid) - == PackageManager.PERMISSION_GRANTED, uids, token)); + canInteractAcrossUsers, uids, token)); } return token; -- cgit v1.2.3-59-g8ed1b