summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Boehm <hboehm@google.com>2021-03-23 11:31:43 -0700
committeralk3pInjection <webmaster@raspii.tech>2021-09-27 21:17:05 +0800
commit0d55d16bc0b6b07f5aa46e089300159a6185a915 (patch)
tree3d9203668b9769ad0b5646c06bc0b78ff30e68d9
parent5096dd7695a2b7b8525f3887268a7b5b305f08f4 (diff)
[master] Don't fork USAPs with open argument buffer
Delay execution of any zygote command that may end up forking USAPs until we've released our own ZygoteCommandBuffer. Otherwise we fork the child with an open ZygoteCommandBuffer, preventing it from opening its own. Bug: 182084594 Test: Build and boot AOSP, with USAPs enabled and disabled. Change-Id: I2366367d2155a120092fbdcae13cbb3d7f4e1d16
-rw-r--r--core/java/com/android/internal/os/ZygoteConnection.java29
1 files changed, 16 insertions, 13 deletions
diff --git a/core/java/com/android/internal/os/ZygoteConnection.java b/core/java/com/android/internal/os/ZygoteConnection.java
index 060689a3f657..47826b3c46ef 100644
--- a/core/java/com/android/internal/os/ZygoteConnection.java
+++ b/core/java/com/android/internal/os/ZygoteConnection.java
@@ -149,8 +149,11 @@ class ZygoteConnection {
return null;
}
- if (parsedArgs.mUsapPoolStatusSpecified) {
- // Handle this once we've released the argBuffer, to avoid opening a second one.
+ if (parsedArgs.mUsapPoolStatusSpecified
+ || parsedArgs.mApiBlacklistExemptions != null
+ || parsedArgs.mHiddenApiAccessLogSampleRate != -1
+ || parsedArgs.mHiddenApiAccessStatslogSampleRate != -1) {
+ // Handle these once we've released argBuffer, to avoid opening a second one.
break;
}
@@ -183,17 +186,7 @@ class ZygoteConnection {
return null;
}
- if (parsedArgs.mApiBlacklistExemptions != null) {
- return handleApiBlacklistExemptions(zygoteServer,
- parsedArgs.mApiBlacklistExemptions);
- }
- if (parsedArgs.mHiddenApiAccessLogSampleRate != -1
- || parsedArgs.mHiddenApiAccessStatslogSampleRate != -1) {
- return handleHiddenApiAccessLogSampleRate(zygoteServer,
- parsedArgs.mHiddenApiAccessLogSampleRate,
- parsedArgs.mHiddenApiAccessStatslogSampleRate);
- }
if (parsedArgs.mPermittedCapabilities != 0
|| parsedArgs.mEffectiveCapabilities != 0) {
@@ -311,10 +304,20 @@ class ZygoteConnection {
}
}
}
+ // Handle anything that may need a ZygoteCommandBuffer after we've released ours.
if (parsedArgs.mUsapPoolStatusSpecified) {
- // Now that we've released argBuffer:
return handleUsapPoolStatusChange(zygoteServer, parsedArgs.mUsapPoolEnabled);
}
+ if (parsedArgs.mApiBlacklistExemptions != null) {
+ return handleApiBlacklistExemptions(zygoteServer,
+ parsedArgs.mApiBlacklistExemptions);
+ }
+ if (parsedArgs.mHiddenApiAccessLogSampleRate != -1
+ || parsedArgs.mHiddenApiAccessStatslogSampleRate != -1) {
+ return handleHiddenApiAccessLogSampleRate(zygoteServer,
+ parsedArgs.mHiddenApiAccessLogSampleRate,
+ parsedArgs.mHiddenApiAccessStatslogSampleRate);
+ }
throw new AssertionError("Shouldn't get here");
}