summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVarun Shah <varunshah@google.com>2018-11-19 15:19:59 -0800
committerandroid-build-merger <android-build-merger@google.com>2018-11-19 15:19:59 -0800
commitabff7881776f4ca1281b62e6f9ef6d0ebc502f6f (patch)
tree286e18cb39bb89c4da2a378d75ad854b0cfac59d
parent3c53f926f340649aadc898b3911bf595627d8711 (diff)
parent84376cb95a41cd1d872fee1f8e390a129420f8c4 (diff)
downloadbase-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.java13
-rw-r--r--services/core/java/com/android/server/am/ActivityManagerService.java8
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) {