Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7a8044dc authored by Bart Sears's avatar Bart Sears Committed by android-build-merger
Browse files

Revert "Report permission flags for all protections based on SDK" am: 784b56e1

am: 076d6f76

Change-Id: I6034405a465919b5e4fc75b4eb109b6ae5259fe0
parents b704e7aa 076d6f76
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -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;
            }
+1 −1
Original line number Diff line number Diff line
@@ -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);

+1 −1
Original line number Diff line number Diff line
@@ -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) {
+6 −50
Original line number Diff line number Diff line
@@ -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