summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Lee Chou <leechou@google.com> 2020-03-03 16:59:17 +0800
committer Lee Chou <leechou@google.com> 2020-03-03 17:11:49 +0800
commit920105c38ba977c8b56e16e4d969ead3acbc576f (patch)
tree4df6c19ddfaea3e7a0b4b6c37ec5d64eb1c07c89
parentfdd209e94b320a685e2e793f2e6dd12102012a11 (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.java23
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 =