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

Commit ad32ba97 authored by Mårten Kongstad's avatar Mårten Kongstad Committed by Todd Kennedy
Browse files

OMS: ignore instant apps

Harden security by teaching the OMS to ignore instant apps, be they
target or overlays. This means that instant apps cannot be targeted by
overlays (except indirectly by overlaying the framework) and that
instant apps cannot act as overlays.

Bug: 128931092
Test: atest OverlayHostTests
Change-Id: Id86e287f5ccc83ba40895bcfc1c60536894f8dfb
parent a50bed00
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -155,6 +155,14 @@ public class InstallOverlayTests extends BaseHostJUnit4Test {
        }
    }

    @Test
    public void instantAppsNotVisibleToOMS() throws Exception {
        installInstantPackage("OverlayHostTests_AppOverlayV1.apk");
        assertFalse(overlayManagerContainsPackage(APP_OVERLAY_PACKAGE_NAME));
        installConvertExistingInstantPackageToFull(APP_OVERLAY_PACKAGE_NAME);
        assertTrue(overlayManagerContainsPackage(APP_OVERLAY_PACKAGE_NAME));
    }

    private void delay() {
        try {
            Thread.sleep(100);
@@ -167,6 +175,15 @@ public class InstallOverlayTests extends BaseHostJUnit4Test {
        delay();
    }

    private void installInstantPackage(String pkg) throws Exception {
        super.installPackage(pkg, "--instant");
        delay();
    }

    private void installConvertExistingInstantPackageToFull(String pkg) throws Exception {
        getDevice().executeShellCommand("cmd package install-existing --wait --full " + pkg);
    }

    private void setPackageEnabled(String pkg, boolean enabled) throws Exception {
        getDevice().executeShellCommand("cmd package " + (enabled ? "enable " : "disable ") + pkg);
        delay();
+3 −3
Original line number Diff line number Diff line
@@ -374,7 +374,7 @@ public final class OverlayManagerService extends SystemService {
                    synchronized (mLock) {
                        final PackageInfo pi = mPackageManager.getPackageInfo(packageName, userId,
                                false);
                        if (pi != null) {
                        if (pi != null && !pi.applicationInfo.isInstantApp()) {
                            mPackageManager.cachePackageInfo(packageName, userId, pi);
                            if (pi.isOverlayPackage()) {
                                mImpl.onOverlayPackageAdded(packageName, userId);
@@ -397,7 +397,7 @@ public final class OverlayManagerService extends SystemService {
                    synchronized (mLock) {
                        final PackageInfo pi = mPackageManager.getPackageInfo(packageName, userId,
                                false);
                        if (pi != null) {
                        if (pi != null && pi.applicationInfo.isInstantApp()) {
                            mPackageManager.cachePackageInfo(packageName, userId, pi);
                            if (pi.isOverlayPackage()) {
                                mImpl.onOverlayPackageChanged(packageName, userId);
@@ -438,7 +438,7 @@ public final class OverlayManagerService extends SystemService {
                    synchronized (mLock) {
                        final PackageInfo pi = mPackageManager.getPackageInfo(packageName, userId,
                                false);
                        if (pi != null) {
                        if (pi != null && !pi.applicationInfo.isInstantApp()) {
                            mPackageManager.cachePackageInfo(packageName, userId, pi);
                            if (pi.isOverlayPackage()) {
                                mImpl.onOverlayPackageUpgraded(packageName, userId);