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

Commit 66e13bad authored by Hai Zhang's avatar Hai Zhang
Browse files

Use per-user Shell UID for adoptShellPermissionIdentity().

Previously we were delegating the per-user Shell's permission state and
primary user Shell's app op state to the instrumentation, which is
inconsistent. We should always delegate the per-user Shell's state.

Bug: 170742504
Change-Id: I3773c2fe34f337f5790ba7d85647501a0f86522f
Test: presubmit
(cherry picked from commit e6fe4bc8)
parent 190d5712
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -20195,10 +20195,11 @@ public class ActivityManagerService extends IActivityManager.Stub
        public int checkOperation(int code, int uid, String packageName, boolean raw,
                QuadFunction<Integer, Integer, String, Boolean, Integer> superImpl) {
            if (uid == mTargetUid && isTargetOp(code)) {
                final int shellUid = UserHandle.getUid(UserHandle.getUserId(uid),
                        Process.SHELL_UID);
                final long identity = Binder.clearCallingIdentity();
                try {
                    return superImpl.apply(code, Process.SHELL_UID,
                            "com.android.shell", raw);
                    return superImpl.apply(code, shellUid, "com.android.shell", raw);
                } finally {
                    Binder.restoreCallingIdentity(identity);
                }
@@ -20210,10 +20211,11 @@ public class ActivityManagerService extends IActivityManager.Stub
        public int checkAudioOperation(int code, int usage, int uid, String packageName,
                QuadFunction<Integer, Integer, Integer, String, Integer> superImpl) {
            if (uid == mTargetUid && isTargetOp(code)) {
                final int shellUid = UserHandle.getUid(UserHandle.getUserId(uid),
                        Process.SHELL_UID);
                final long identity = Binder.clearCallingIdentity();
                try {
                    return superImpl.apply(code, usage, Process.SHELL_UID,
                            "com.android.shell");
                    return superImpl.apply(code, usage, shellUid, "com.android.shell");
                } finally {
                    Binder.restoreCallingIdentity(identity);
                }
@@ -20228,9 +20230,11 @@ public class ActivityManagerService extends IActivityManager.Stub
                @NonNull HeptFunction<Integer, Integer, String, String, Boolean, String, Boolean,
                        Integer> superImpl) {
            if (uid == mTargetUid && isTargetOp(code)) {
                final int shellUid = UserHandle.getUid(UserHandle.getUserId(uid),
                        Process.SHELL_UID);
                final long identity = Binder.clearCallingIdentity();
                try {
                    return superImpl.apply(code, Process.SHELL_UID, "com.android.shell", featureId,
                    return superImpl.apply(code, shellUid, "com.android.shell", featureId,
                            shouldCollectAsyncNotedOp, message, shouldCollectMessage);
                } finally {
                    Binder.restoreCallingIdentity(identity);