diff options
| author | 2020-03-03 16:59:17 +0800 | |
|---|---|---|
| committer | 2020-03-03 17:11:49 +0800 | |
| commit | 920105c38ba977c8b56e16e4d969ead3acbc576f (patch) | |
| tree | 4df6c19ddfaea3e7a0b4b6c37ec5d64eb1c07c89 | |
| parent | fdd209e94b320a685e2e793f2e6dd12102012a11 (diff) | |
Revert "Remove exception from OverlayConfig zygote method"
Commit ag/9740370 caused problem with robotests b/149806146
The fix ag/10373855 froze targets like run_host_tests
This revert will unfreeze run_host_tests but robotests will break
Bug: 150011638
Test: m RunSettingsRoboTests0
Change-Id: Ibe954e9d0dc1542477ba7156da5799479631cfb0
| -rw-r--r-- | core/java/com/android/internal/content/om/OverlayConfig.java | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/core/java/com/android/internal/content/om/OverlayConfig.java b/core/java/com/android/internal/content/om/OverlayConfig.java index fbef027ac37f..2b08a773b6e7 100644 --- a/core/java/com/android/internal/content/om/OverlayConfig.java +++ b/core/java/com/android/internal/content/om/OverlayConfig.java @@ -21,6 +21,7 @@ import android.annotation.Nullable; import android.content.pm.PackagePartitions; import android.content.pm.parsing.ParsingPackageRead; import android.os.Build; +import android.os.Process; import android.os.Trace; import android.util.ArrayMap; import android.util.Log; @@ -185,6 +186,13 @@ public class OverlayConfig { */ @NonNull public static OverlayConfig getZygoteInstance() { + if (Process.myUid() != Process.ROOT_UID) { + // Scan the overlays in the zygote process to generate configuration settings for + // overlays on the system image. Do not cache this instance so OverlayConfig will not + // be present in applications by default. + throw new IllegalStateException("Can only be invoked in the root process"); + } + Trace.traceBegin(Trace.TRACE_TAG_RRO, "OverlayConfig#getZygoteInstance"); try { return new OverlayConfig(null /* rootDirectory */, OverlayScanner::new, @@ -201,12 +209,13 @@ public class OverlayConfig { */ @NonNull public static OverlayConfig initializeSystemInstance(PackageProvider packageProvider) { - Trace.traceBegin(Trace.TRACE_TAG_RRO, "OverlayConfig#initializeSystemInstance"); - try { - sInstance = new OverlayConfig(null, null, packageProvider); - } finally { - Trace.traceEnd(Trace.TRACE_TAG_RRO); + if (Process.myUid() != Process.SYSTEM_UID) { + throw new IllegalStateException("Can only be invoked in the system process"); } + + Trace.traceBegin(Trace.TRACE_TAG_RRO, "OverlayConfig#initializeSystemInstance"); + sInstance = new OverlayConfig(null, null, packageProvider); + Trace.traceEnd(Trace.TRACE_TAG_RRO); return sInstance; } @@ -370,6 +379,10 @@ public class OverlayConfig { */ @NonNull public String[] createImmutableFrameworkIdmapsInZygote() { + if (Process.myUid() != Process.ROOT_UID) { + throw new IllegalStateException("This method can only be called from the root process"); + } + final String targetPath = "/system/framework/framework-res.apk"; final ArrayList<String> idmapPaths = new ArrayList<>(); final ArrayList<IdmapInvocation> idmapInvocations = |