diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 4a5763230578d..ee5ad95913be6 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -5690,6 +5690,16 @@ public class ActivityManagerService extends IActivityManager.Stub if (pid == MY_PID) { return PackageManager.PERMISSION_GRANTED; } + try { + if (uid != 0) { // bypass the root + final String[] packageNames = getPackageManager().getPackagesForUid(uid); + if (ArrayUtils.isEmpty(packageNames)) { + // The uid is not existed or not visible to the caller. + return PackageManager.PERMISSION_DENIED; + } + } + } catch (RemoteException e) { + } return mUgmInternal.checkUriPermission(new GrantUri(userId, uri, modeFlags), uid, modeFlags) ? PackageManager.PERMISSION_GRANTED : PackageManager.PERMISSION_DENIED; }