Loading core/java/android/app/ApplicationPackageManager.java +1 −2 Original line number Diff line number Diff line Loading @@ -285,8 +285,7 @@ public class ApplicationPackageManager extends PackageManager { public PermissionInfo getPermissionInfo(String name, int flags) throws NameNotFoundException { try { PermissionInfo pi = mPM.getPermissionInfo(name, mContext.getOpPackageName(), flags); PermissionInfo pi = mPM.getPermissionInfo(name, flags); if (pi != null) { return pi; } Loading core/java/android/content/pm/IPackageManager.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -72,7 +72,7 @@ interface IPackageManager { String[] currentToCanonicalPackageNames(in String[] names); String[] canonicalToCurrentPackageNames(in String[] names); PermissionInfo getPermissionInfo(String name, String packageName, int flags); PermissionInfo getPermissionInfo(String name, int flags); ParceledListSlice queryPermissionsByGroup(String group, int flags); Loading services/core/java/com/android/server/am/BroadcastQueue.java +1 −1 Original line number Diff line number Diff line Loading @@ -802,7 +802,7 @@ public final class BroadcastQueue { IPackageManager pm = AppGlobals.getPackageManager(); for (int i = perms.length-1; i >= 0; i--) { try { PermissionInfo pi = pm.getPermissionInfo(perms[i], "android", 0); PermissionInfo pi = pm.getPermissionInfo(perms[i], 0); if ((pi.protectionLevel & (PermissionInfo.PROTECTION_MASK_BASE | PermissionInfo.PROTECTION_FLAG_PRIVILEGED)) != PermissionInfo.PROTECTION_SIGNATURE) { Loading services/core/java/com/android/server/pm/PackageManagerService.java +6 −50 Original line number Diff line number Diff line Loading @@ -4223,62 +4223,18 @@ public class PackageManagerService extends IPackageManager.Stub } @Override public PermissionInfo getPermissionInfo(String name, String packageName, int flags) { final int callingUid = Binder.getCallingUid(); if (getInstantAppPackageName(callingUid) != null) { public PermissionInfo getPermissionInfo(String name, int flags) { if (getInstantAppPackageName(Binder.getCallingUid()) != null) { return null; } // reader synchronized (mPackages) { final BasePermission p = mSettings.mPermissions.get(name); // If the caller is an app that targets pre 26 SDK drop protection flags. final PermissionInfo permissionInfo = generatePermissionInfo(p, flags); permissionInfo.protectionLevel = adjustPermissionProtectionFlagsLPr( permissionInfo.protectionLevel, packageName, callingUid); return permissionInfo; } } private int adjustPermissionProtectionFlagsLPr(int protectionLevel, String packageName, int uid) { // Signature permission flags area always reported final int protectionLevelMasked = protectionLevel & (PermissionInfo.PROTECTION_NORMAL | PermissionInfo.PROTECTION_DANGEROUS | PermissionInfo.PROTECTION_SIGNATURE); if (protectionLevelMasked == PermissionInfo.PROTECTION_SIGNATURE) { return protectionLevel; } // System sees all flags. final int appId = UserHandle.getAppId(uid); if (appId == Process.SYSTEM_UID || appId == Process.ROOT_UID || appId == Process.SHELL_UID) { return protectionLevel; } // Normalize package name to handle renamed packages and static libs packageName = resolveInternalPackageNameLPr(packageName, PackageManager.VERSION_CODE_HIGHEST); // Apps that target O see flags for all protection levels. final PackageSetting ps = mSettings.mPackages.get(packageName); if (ps == null) { return protectionLevel; } if (ps.appId != appId) { return protectionLevel; } final PackageParser.Package pkg = mPackages.get(packageName); if (pkg == null) { return protectionLevel; if (p != null) { return generatePermissionInfo(p, flags); } if (pkg.applicationInfo.targetSdkVersion < Build.VERSION_CODES.O) { return protectionLevelMasked; return null; } return protectionLevel; } @Override Loading
core/java/android/app/ApplicationPackageManager.java +1 −2 Original line number Diff line number Diff line Loading @@ -285,8 +285,7 @@ public class ApplicationPackageManager extends PackageManager { public PermissionInfo getPermissionInfo(String name, int flags) throws NameNotFoundException { try { PermissionInfo pi = mPM.getPermissionInfo(name, mContext.getOpPackageName(), flags); PermissionInfo pi = mPM.getPermissionInfo(name, flags); if (pi != null) { return pi; } Loading
core/java/android/content/pm/IPackageManager.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -72,7 +72,7 @@ interface IPackageManager { String[] currentToCanonicalPackageNames(in String[] names); String[] canonicalToCurrentPackageNames(in String[] names); PermissionInfo getPermissionInfo(String name, String packageName, int flags); PermissionInfo getPermissionInfo(String name, int flags); ParceledListSlice queryPermissionsByGroup(String group, int flags); Loading
services/core/java/com/android/server/am/BroadcastQueue.java +1 −1 Original line number Diff line number Diff line Loading @@ -802,7 +802,7 @@ public final class BroadcastQueue { IPackageManager pm = AppGlobals.getPackageManager(); for (int i = perms.length-1; i >= 0; i--) { try { PermissionInfo pi = pm.getPermissionInfo(perms[i], "android", 0); PermissionInfo pi = pm.getPermissionInfo(perms[i], 0); if ((pi.protectionLevel & (PermissionInfo.PROTECTION_MASK_BASE | PermissionInfo.PROTECTION_FLAG_PRIVILEGED)) != PermissionInfo.PROTECTION_SIGNATURE) { Loading
services/core/java/com/android/server/pm/PackageManagerService.java +6 −50 Original line number Diff line number Diff line Loading @@ -4223,62 +4223,18 @@ public class PackageManagerService extends IPackageManager.Stub } @Override public PermissionInfo getPermissionInfo(String name, String packageName, int flags) { final int callingUid = Binder.getCallingUid(); if (getInstantAppPackageName(callingUid) != null) { public PermissionInfo getPermissionInfo(String name, int flags) { if (getInstantAppPackageName(Binder.getCallingUid()) != null) { return null; } // reader synchronized (mPackages) { final BasePermission p = mSettings.mPermissions.get(name); // If the caller is an app that targets pre 26 SDK drop protection flags. final PermissionInfo permissionInfo = generatePermissionInfo(p, flags); permissionInfo.protectionLevel = adjustPermissionProtectionFlagsLPr( permissionInfo.protectionLevel, packageName, callingUid); return permissionInfo; } } private int adjustPermissionProtectionFlagsLPr(int protectionLevel, String packageName, int uid) { // Signature permission flags area always reported final int protectionLevelMasked = protectionLevel & (PermissionInfo.PROTECTION_NORMAL | PermissionInfo.PROTECTION_DANGEROUS | PermissionInfo.PROTECTION_SIGNATURE); if (protectionLevelMasked == PermissionInfo.PROTECTION_SIGNATURE) { return protectionLevel; } // System sees all flags. final int appId = UserHandle.getAppId(uid); if (appId == Process.SYSTEM_UID || appId == Process.ROOT_UID || appId == Process.SHELL_UID) { return protectionLevel; } // Normalize package name to handle renamed packages and static libs packageName = resolveInternalPackageNameLPr(packageName, PackageManager.VERSION_CODE_HIGHEST); // Apps that target O see flags for all protection levels. final PackageSetting ps = mSettings.mPackages.get(packageName); if (ps == null) { return protectionLevel; } if (ps.appId != appId) { return protectionLevel; } final PackageParser.Package pkg = mPackages.get(packageName); if (pkg == null) { return protectionLevel; if (p != null) { return generatePermissionInfo(p, flags); } if (pkg.applicationInfo.targetSdkVersion < Build.VERSION_CODES.O) { return protectionLevelMasked; return null; } return protectionLevel; } @Override