From 77b53b2c56fd63d4aa3c5e61e8a98011ffc9da86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Kongstad?= <marten.kongstad@sony.com> Date: Tue, 1 Oct 2019 08:29:21 +0200 Subject: [PATCH] Remove the FEATURE_FLAG_IDMAP2 flag Test: atest OverlayDeviceTests OverlayHostTests FrameworksServicesTests:com.android.server.om CtsAppSecurityHostTestCases:OverlayHostTest Change-Id: Ib68eaf7f721c5d440fe7185777e88e23cb9840a4 --- .../android/content/res/AssetManager.java | 19 +++---- .../com/android/server/om/IdmapManager.java | 50 ++++++------------- .../server/om/OverlayManagerService.java | 6 +-- .../java/com/android/server/SystemServer.java | 2 +- .../om/OverlayManagerServiceImplTests.java | 2 +- 5 files changed, 24 insertions(+), 55 deletions(-) diff --git a/core/java/android/content/res/AssetManager.java b/core/java/android/content/res/AssetManager.java index 567e26b4c2f61..7d6dc97e82cba 100644 --- a/core/java/android/content/res/AssetManager.java +++ b/core/java/android/content/res/AssetManager.java @@ -60,7 +60,6 @@ import java.util.Map; public final class AssetManager implements AutoCloseable { private static final String TAG = "AssetManager"; private static final boolean DEBUG_REFS = false; - private static final boolean FEATURE_FLAG_IDMAP2 = true; private static final String FRAMEWORK_APK_PATH = "/system/framework/framework-res.apk"; @@ -202,20 +201,14 @@ public final class AssetManager implements AutoCloseable { try { final ArrayList<ApkAssets> apkAssets = new ArrayList<>(); apkAssets.add(ApkAssets.loadFromPath(FRAMEWORK_APK_PATH, true /*system*/)); - if (FEATURE_FLAG_IDMAP2) { - final String[] systemIdmapPaths = - nativeCreateIdmapsForStaticOverlaysTargetingAndroid(); - if (systemIdmapPaths != null) { - for (String idmapPath : systemIdmapPaths) { - apkAssets.add(ApkAssets.loadOverlayFromPath(idmapPath, true /*system*/)); - } - } else { - Log.w(TAG, "'idmap2 --scan' failed: no static=\"true\" overlays targeting " - + "\"android\" will be loaded"); + final String[] systemIdmapPaths = nativeCreateIdmapsForStaticOverlaysTargetingAndroid(); + if (systemIdmapPaths != null) { + for (String idmapPath : systemIdmapPaths) { + apkAssets.add(ApkAssets.loadOverlayFromPath(idmapPath, true /*system*/)); } } else { - nativeVerifySystemIdmaps(); - loadStaticRuntimeOverlays(apkAssets); + Log.w(TAG, "'idmap2 --scan' failed: no static=\"true\" overlays targeting " + + "\"android\" will be loaded"); } sSystemApkAssetsSet = new ArraySet<>(apkAssets); diff --git a/services/core/java/com/android/server/om/IdmapManager.java b/services/core/java/com/android/server/om/IdmapManager.java index 288ef0e618b62..f3c912817d05c 100644 --- a/services/core/java/com/android/server/om/IdmapManager.java +++ b/services/core/java/com/android/server/om/IdmapManager.java @@ -30,20 +30,17 @@ import android.os.UserHandle; import android.util.Slog; import com.android.server.om.OverlayManagerServiceImpl.PackageManagerHelper; -import com.android.server.pm.Installer; import java.io.File; /** * Handle the creation and deletion of idmap files. * - * The actual work is performed by the idmap binary, launched through Installer - * and installd (or idmap2). + * The actual work is performed by the idmap binary, launched through idmap2d. * * Note: this class is subclassed in the OMS unit tests, and hence not marked as final. */ class IdmapManager { - private static final boolean FEATURE_FLAG_IDMAP2 = true; private static final boolean VENDOR_IS_Q_OR_LATER; static { final String value = SystemProperties.get("ro.vndk.version", "29"); @@ -58,12 +55,10 @@ class IdmapManager { VENDOR_IS_Q_OR_LATER = isQOrLater; } - private final Installer mInstaller; private final PackageManagerHelper mPackageManager; private final IdmapDaemon mIdmapDaemon; - IdmapManager(final Installer installer, final PackageManagerHelper packageManager) { - mInstaller = installer; + IdmapManager(final PackageManagerHelper packageManager) { mPackageManager = packageManager; mIdmapDaemon = IdmapDaemon.getInstance(); } @@ -78,18 +73,13 @@ class IdmapManager { final String targetPath = targetPackage.applicationInfo.getBaseCodePath(); final String overlayPath = overlayPackage.applicationInfo.getBaseCodePath(); try { - if (FEATURE_FLAG_IDMAP2) { - int policies = calculateFulfilledPolicies(targetPackage, overlayPackage, userId); - boolean enforce = enforceOverlayable(overlayPackage); - if (mIdmapDaemon.verifyIdmap(overlayPath, policies, enforce, userId)) { - return true; - } - return mIdmapDaemon.createIdmap(targetPath, overlayPath, policies, - enforce, userId) != null; - } else { - mInstaller.idmap(targetPath, overlayPath, sharedGid); + int policies = calculateFulfilledPolicies(targetPackage, overlayPackage, userId); + boolean enforce = enforceOverlayable(overlayPackage); + if (mIdmapDaemon.verifyIdmap(overlayPath, policies, enforce, userId)) { return true; } + return mIdmapDaemon.createIdmap(targetPath, overlayPath, policies, + enforce, userId) != null; } catch (Exception e) { Slog.w(TAG, "failed to generate idmap for " + targetPath + " and " + overlayPath + ": " + e.getMessage()); @@ -102,12 +92,7 @@ class IdmapManager { Slog.d(TAG, "remove idmap for " + oi.baseCodePath); } try { - if (FEATURE_FLAG_IDMAP2) { - return mIdmapDaemon.removeIdmap(oi.baseCodePath, userId); - } else { - mInstaller.removeIdmap(oi.baseCodePath); - return true; - } + return mIdmapDaemon.removeIdmap(oi.baseCodePath, userId); } catch (Exception e) { Slog.w(TAG, "failed to remove idmap for " + oi.baseCodePath + ": " + e.getMessage()); return false; @@ -125,19 +110,12 @@ class IdmapManager { private @NonNull String getIdmapPath(@NonNull final String overlayPackagePath, final int userId) { - if (FEATURE_FLAG_IDMAP2) { - try { - return mIdmapDaemon.getIdmapPath(overlayPackagePath, userId); - } catch (Exception e) { - Slog.w(TAG, "failed to get idmap path for " + overlayPackagePath + ": " - + e.getMessage()); - return ""; - } - } else { - final StringBuilder sb = new StringBuilder("/data/resource-cache/"); - sb.append(overlayPackagePath.substring(1).replace('/', '@')); - sb.append("@idmap"); - return sb.toString(); + try { + return mIdmapDaemon.getIdmapPath(overlayPackagePath, userId); + } catch (Exception e) { + Slog.w(TAG, "failed to get idmap path for " + overlayPackagePath + ": " + + e.getMessage()); + return ""; } } diff --git a/services/core/java/com/android/server/om/OverlayManagerService.java b/services/core/java/com/android/server/om/OverlayManagerService.java index f8b3fb2590896..83bea9dd1efce 100644 --- a/services/core/java/com/android/server/om/OverlayManagerService.java +++ b/services/core/java/com/android/server/om/OverlayManagerService.java @@ -62,7 +62,6 @@ import com.android.server.FgThread; import com.android.server.IoThread; import com.android.server.LocalServices; import com.android.server.SystemService; -import com.android.server.pm.Installer; import com.android.server.pm.UserManagerService; import libcore.util.EmptyArray; @@ -230,8 +229,7 @@ public final class OverlayManagerService extends SystemService { private final AtomicBoolean mPersistSettingsScheduled = new AtomicBoolean(false); - public OverlayManagerService(@NonNull final Context context, - @NonNull final Installer installer) { + public OverlayManagerService(@NonNull final Context context) { super(context); try { traceBegin(TRACE_TAG_RRO, "OMS#OverlayManagerService"); @@ -239,7 +237,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, mPackageManager); + IdmapManager im = new IdmapManager(mPackageManager); mSettings = new OverlayManagerSettings(); mImpl = new OverlayManagerServiceImpl(mPackageManager, im, mSettings, getDefaultOverlayPackages(), new OverlayChangeListener()); diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index e93e17ae7a3cf..de65002c2c31f 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -804,7 +804,7 @@ public final class SystemServer { // Manages Overlay packages t.traceBegin("StartOverlayManagerService"); - mSystemServiceManager.startService(new OverlayManagerService(mSystemContext, installer)); + mSystemServiceManager.startService(new OverlayManagerService(mSystemContext)); t.traceEnd(); t.traceBegin("StartSensorPrivacyService"); diff --git a/services/tests/servicestests/src/com/android/server/om/OverlayManagerServiceImplTests.java b/services/tests/servicestests/src/com/android/server/om/OverlayManagerServiceImplTests.java index 3cdadd58486ff..c566dfc4a23e8 100644 --- a/services/tests/servicestests/src/com/android/server/om/OverlayManagerServiceImplTests.java +++ b/services/tests/servicestests/src/com/android/server/om/OverlayManagerServiceImplTests.java @@ -444,7 +444,7 @@ public class OverlayManagerServiceImplTests { private Set<String> mIdmapFiles = new ArraySet<>(); DummyIdmapManager(DummyDeviceState state, DummyPackageManagerHelper packageManagerHelper) { - super(null, packageManagerHelper); + super(packageManagerHelper); mState = state; } -- GitLab