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

Commit 25060bbd authored by Hongming Jin's avatar Hongming Jin Committed by android-build-team Robot
Browse files

RESTRICT AUTOMERGE: Check both self and shared user id package for requested permissions.

Bug: 111752150
Test: Manual local test

Change-Id: I80383300cd5d2455d08a0ad91000efa85404903b
(cherry picked from commit 5e37e9d9)
parent 181dc252
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import android.util.Slog;

import com.android.server.pm.DumpState;
import com.android.server.pm.PackageManagerService;
import com.android.server.pm.PackageSetting;
import com.android.server.pm.PackageSettingBase;

import org.xmlpull.v1.XmlPullParser;
@@ -374,8 +375,10 @@ public final class BasePermission {
    }

    public void enforceDeclaredUsedAndRuntimeOrDevelopment(PackageParser.Package pkg) {
        final PackageSetting pkgSetting = (PackageSetting) pkg.mExtras;
        final PermissionsState permsState = pkgSetting.getPermissionsState();
        int index = pkg.requestedPermissions.indexOf(name);
        if (index == -1) {
        if (!permsState.hasRequestedPermission(name) && index == -1) {
            throw new SecurityException("Package " + pkg.packageName
                    + " has not requested permission " + name);
        }
+8 −1
Original line number Diff line number Diff line
@@ -20,9 +20,9 @@ import android.content.pm.PackageManager;
import android.os.UserHandle;
import android.util.ArrayMap;
import android.util.ArraySet;

import android.util.SparseArray;
import android.util.SparseBooleanArray;

import com.android.internal.util.ArrayUtils;

import java.util.ArrayList;
@@ -290,6 +290,13 @@ public final class PermissionsState {
        return false;
    }

    /**
     * Returns whether the state has any known request for the given permission name,
     * whether or not it has been granted.
     */
    public boolean hasRequestedPermission(String name) {
        return mPermissions != null && (mPermissions.get(name) != null);
    }
    /**
     * Gets all permissions for a given device user id regardless if they
     * are install time or runtime permissions.