diff options
| -rw-r--r-- | services/core/java/com/android/server/am/ActiveServices.java | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java index a792e9e805e8..216c9dc4375e 100644 --- a/services/core/java/com/android/server/am/ActiveServices.java +++ b/services/core/java/com/android/server/am/ActiveServices.java @@ -6475,7 +6475,7 @@ public final class ActiveServices { } } - if (ret == REASON_DENIED) { + if (ret == REASON_DENIED && verifyPackage(callingPackage, callingUid)) { final boolean isAllowedPackage = mAllowListWhileInUsePermissionInFgs.contains(callingPackage); if (isAllowedPackage) { @@ -6882,4 +6882,19 @@ public final class ActiveServices { /* allowBackgroundActivityStarts */ false) != REASON_DENIED; } + + /** + * Checks if a given packageName belongs to a given uid. + * @param packageName the package of the caller + * @param uid the uid of the caller + * @return true or false + */ + private boolean verifyPackage(String packageName, int uid) { + if (uid == ROOT_UID || uid == SYSTEM_UID) { + //System and Root are always allowed + return true; + } + return mAm.getPackageManagerInternal().isSameApp(packageName, uid, + UserHandle.getUserId(uid)); + } } |