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

Commit 78f738b8 authored by Winson Chiu's avatar Winson Chiu Committed by Android (Google) Code Review
Browse files

Merge "Check signature policy in IdmapManager"

parents 1f5b4ef5 e0818bfa
Loading
Loading
Loading
Loading
+12 −5
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import android.os.UserHandle;
import android.util.Slog;

import com.android.internal.os.BackgroundThread;
import com.android.server.om.OverlayManagerServiceImpl.PackageManagerHelper;
import com.android.server.pm.Installer;

import java.io.File;
@@ -52,6 +53,7 @@ class IdmapManager {
    private static final boolean FEATURE_FLAG_IDMAP2 = true;

    private final Installer mInstaller;
    private final PackageManagerHelper mPackageManager;
    private IIdmap2 mIdmap2Service;

    private static final boolean VENDOR_IS_Q_OR_LATER;
@@ -61,8 +63,9 @@ class IdmapManager {
        VENDOR_IS_Q_OR_LATER = value.equals("Q") || value.equals("q");
    }

    IdmapManager(final Installer installer) {
    IdmapManager(final Installer installer, final PackageManagerHelper packageManager) {
        mInstaller = installer;
        mPackageManager = packageManager;
        if (FEATURE_FLAG_IDMAP2) {
            connectToIdmap2d();
        }
@@ -79,7 +82,7 @@ class IdmapManager {
        final String overlayPath = overlayPackage.applicationInfo.getBaseCodePath();
        try {
            if (FEATURE_FLAG_IDMAP2) {
                int policies = determineFulfilledPolicies(overlayPackage);
                int policies = determineFulfilledPolicies(targetPackage, overlayPackage, userId);
                boolean enforce = enforceOverlayable(overlayPackage);
                if (mIdmap2Service.verifyIdmap(overlayPath, policies, enforce, userId)) {
                    return true;
@@ -197,14 +200,18 @@ class IdmapManager {
     * Retrieves a bitmask for idmap2 that represents the policies the specified overlay fulfills.
     * @throws SecurityException if the overlay is not allowed to overlay any resource
     */
    private int determineFulfilledPolicies(@NonNull final PackageInfo overlayPackage)
            throws SecurityException {
    private int determineFulfilledPolicies(@NonNull final PackageInfo targetPackage,
            @NonNull final PackageInfo overlayPackage, int userId) throws SecurityException {
        final ApplicationInfo ai = overlayPackage.applicationInfo;
        final boolean overlayIsQOrLater = ai.targetSdkVersion >= VERSION_CODES.Q;

        int fulfilledPolicies = 0;

        // TODO(b/119402606) : Add signature policy
        // Overlay matches target signature
        if (mPackageManager.signaturesMatching(targetPackage.packageName,
                overlayPackage.packageName, userId)) {
            fulfilledPolicies |= IIdmap2.POLICY_SIGNATURE;
        }

        // Vendor partition (/vendor)
        if (ai.isVendor()) {
+1 −1
Original line number Diff line number Diff line
@@ -232,7 +232,7 @@ public final class OverlayManagerService extends SystemService {
                    new File(Environment.getDataSystemDirectory(), "overlays.xml"), "overlays");
            mPackageManager = new PackageManagerHelper();
            mUserManager = UserManagerService.getInstance();
            IdmapManager im = new IdmapManager(installer);
            IdmapManager im = new IdmapManager(installer, mPackageManager);
            mSettings = new OverlayManagerSettings();
            mImpl = new OverlayManagerServiceImpl(mPackageManager, im, mSettings,
                    getDefaultOverlayPackages(), new OverlayChangeListener());