diff options
author | Varun Shah <varunshah@google.com> | 2018-11-19 15:19:59 -0800 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2018-11-19 15:19:59 -0800 |
commit | abff7881776f4ca1281b62e6f9ef6d0ebc502f6f (patch) | |
tree | 286e18cb39bb89c4da2a378d75ad854b0cfac59d | |
parent | 3c53f926f340649aadc898b3911bf595627d8711 (diff) | |
parent | 84376cb95a41cd1d872fee1f8e390a129420f8c4 (diff) | |
download | base-abff7881776f4ca1281b62e6f9ef6d0ebc502f6f.tar.gz |
Merge "RESTRICT AUTOMERGE: Added an app id security check in isAppForeground." into oc-dev am: 546ba589a2
am: 84376cb95a
Change-Id: I096470de6d03ab34591b12bc7172056a1ffe38ed
-rw-r--r-- | core/java/android/os/UserHandle.java | 13 | ||||
-rw-r--r-- | services/core/java/com/android/server/am/ActivityManagerService.java | 8 |
2 files changed, 21 insertions, 0 deletions
diff --git a/core/java/android/os/UserHandle.java b/core/java/android/os/UserHandle.java index e8ebf6312cdd..f36cf1ca2bef 100644 --- a/core/java/android/os/UserHandle.java +++ b/core/java/android/os/UserHandle.java @@ -132,6 +132,19 @@ public final class UserHandle implements Parcelable { } /** + * Whether a UID belongs to a system core component or not. + * @hide + */ + public static boolean isCore(int uid) { + if (uid >= 0) { + final int appId = getAppId(uid); + return appId < Process.FIRST_APPLICATION_UID; + } else { + return false; + } + } + + /** * Returns the user for a given uid. * @param uid A uid for an application running in a particular user. * @return A {@link UserHandle} for that user. diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 366e533168d0..448d60a2e2b0 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -8021,6 +8021,14 @@ public class ActivityManagerService extends IActivityManager.Stub @Override public boolean isAppForeground(int uid) throws RemoteException { + int callerUid = Binder.getCallingUid(); + if (UserHandle.isCore(callerUid) || callerUid == uid) { + return isAppForegroundInternal(uid); + } + return false; + } + + private boolean isAppForegroundInternal(int uid) { synchronized (this) { UidRecord uidRec = mActiveUids.get(uid); if (uidRec == null || uidRec.idle) { |