summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Chris Wailes <chriswailes@google.com> 2019-04-23 14:26:13 -0700
committer Chris Wailes <chriswailes@google.com> 2020-01-15 16:19:46 -0800
commit82cde3eaedd9848e86f8cab3baec625ad8edc181 (patch)
treebe21911b0245c3c5d2552a9554d75807379d243b
parenta32fcb74e5720bc3ebf7e1f3980f0bd75845b79c (diff)
Change USAP name to application name as soon as possible.
This patch changes the location where the process's name is changed to that of the application being launched. It also attempts to use the package name if the "nice name" is missing. Test: m & flash & boot Bug: 146614089 Change-Id: Id3a3d0b2b66d31c48274f8a986e86e9ed1d28f34 Merged-In: Id3a3d0b2b66d31c48274f8a986e86e9ed1d28f34
-rw-r--r--core/java/com/android/internal/os/Zygote.java57
-rw-r--r--core/java/com/android/internal/os/ZygoteConnection.java4
2 files changed, 33 insertions, 28 deletions
diff --git a/core/java/com/android/internal/os/Zygote.java b/core/java/com/android/internal/os/Zygote.java
index 33adec106d97..2b225286afa6 100644
--- a/core/java/com/android/internal/os/Zygote.java
+++ b/core/java/com/android/internal/os/Zygote.java
@@ -49,9 +49,9 @@ import java.io.InputStreamReader;
/** @hide */
public final class Zygote {
/*
- * Bit values for "runtimeFlags" argument. The definitions are duplicated
- * in the native code.
- */
+ * Bit values for "runtimeFlags" argument. The definitions are duplicated
+ * in the native code.
+ */
/** enable debugging over JDWP */
public static final int DEBUG_ENABLE_JDWP = 1;
@@ -298,7 +298,7 @@ public final class Zygote {
int[][] rlimits, int mountExternal, String seInfo, String niceName,
boolean startChildZygote, String instructionSet, String appDataDir) {
nativeSpecializeAppProcess(uid, gid, gids, runtimeFlags, rlimits, mountExternal, seInfo,
- niceName, startChildZygote, instructionSet, appDataDir);
+ niceName, startChildZygote, instructionSet, appDataDir);
// Enable tracing as soon as possible for the child process.
Trace.setTracingEnabled(true, runtimeFlags);
@@ -482,7 +482,7 @@ public final class Zygote {
* application that is passed up from usapMain.
*/
static Runnable forkUsap(LocalServerSocket usapPoolSocket,
- int[] sessionSocketRawFDs) {
+ int[] sessionSocketRawFDs) {
FileDescriptor[] pipeFDs = null;
try {
@@ -506,8 +506,8 @@ public final class Zygote {
}
private static native int nativeForkUsap(int readPipeFD,
- int writePipeFD,
- int[] sessionSocketRawFDs);
+ int writePipeFD,
+ int[] sessionSocketRawFDs);
/**
* This function is used by unspecialized app processes to wait for specialization requests from
@@ -518,7 +518,7 @@ public final class Zygote {
* @return A runnable oject representing the new application.
*/
private static Runnable usapMain(LocalServerSocket usapPoolSocket,
- FileDescriptor writePipe) {
+ FileDescriptor writePipe) {
final int pid = Process.myPid();
Process.setArgV0(Process.is64Bit() ? "usap64" : "usap32");
@@ -568,6 +568,7 @@ public final class Zygote {
try {
// SIGTERM is blocked on loop exit. This prevents a USAP that is specializing from
// being killed during a pool flush.
+ setAppProcessName(args, "USAP");
applyUidSecurityPolicy(args, peerCredentials);
applyDebuggerSystemProperty(args);
@@ -628,23 +629,19 @@ public final class Zygote {
}
specializeAppProcess(args.mUid, args.mGid, args.mGids,
- args.mRuntimeFlags, rlimits, args.mMountExternal,
- args.mSeInfo, args.mNiceName, args.mStartChildZygote,
- args.mInstructionSet, args.mAppDataDir);
+ args.mRuntimeFlags, rlimits, args.mMountExternal,
+ args.mSeInfo, args.mNiceName, args.mStartChildZygote,
+ args.mInstructionSet, args.mAppDataDir);
disableExecuteOnly(args.mTargetSdkVersion);
- if (args.mNiceName != null) {
- Process.setArgV0(args.mNiceName);
- }
-
// End of the postFork event.
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);
return ZygoteInit.zygoteInit(args.mTargetSdkVersion,
- args.mDisabledCompatChanges,
- args.mRemainingArgs,
- null /* classLoader */);
+ args.mDisabledCompatChanges,
+ args.mRemainingArgs,
+ null /* classLoader */);
} finally {
// Unblock SIGTERM to restore the process to default behavior.
unblockSigTerm();
@@ -663,6 +660,16 @@ public final class Zygote {
private static native void nativeUnblockSigTerm();
+ static void setAppProcessName(ZygoteArguments args, String loggingTag) {
+ if (args.mNiceName != null) {
+ Process.setArgV0(args.mNiceName);
+ } else if (args.mPackageName != null) {
+ Process.setArgV0(args.mPackageName);
+ } else {
+ Log.w(loggingTag, "Unable to set package name.");
+ }
+ }
+
private static final String USAP_ERROR_PREFIX = "Invalid command to USAP: ";
/**
@@ -685,7 +692,7 @@ public final class Zygote {
throw new IllegalArgumentException(USAP_ERROR_PREFIX + "--start-child-zygote");
} else if (args.mApiBlacklistExemptions != null) {
throw new IllegalArgumentException(
- USAP_ERROR_PREFIX + "--set-api-blacklist-exemptions");
+ USAP_ERROR_PREFIX + "--set-api-blacklist-exemptions");
} else if (args.mHiddenApiAccessLogSampleRate != -1) {
throw new IllegalArgumentException(
USAP_ERROR_PREFIX + "--hidden-api-log-sampling-rate=");
@@ -696,8 +703,8 @@ public final class Zygote {
throw new IllegalArgumentException(USAP_ERROR_PREFIX + "--invoke-with");
} else if (args.mPermittedCapabilities != 0 || args.mEffectiveCapabilities != 0) {
throw new ZygoteSecurityException("Client may not specify capabilities: "
- + "permitted=0x" + Long.toHexString(args.mPermittedCapabilities)
- + ", effective=0x" + Long.toHexString(args.mEffectiveCapabilities));
+ + "permitted=0x" + Long.toHexString(args.mPermittedCapabilities)
+ + ", effective=0x" + Long.toHexString(args.mEffectiveCapabilities));
}
}
@@ -754,7 +761,7 @@ public final class Zygote {
if (uidRestricted && args.mUidSpecified && (args.mUid < Process.SYSTEM_UID)) {
throw new ZygoteSecurityException(
"System UID may not launch process with UID < "
- + Process.SYSTEM_UID);
+ + Process.SYSTEM_UID);
}
}
@@ -804,8 +811,8 @@ public final class Zygote {
if (args.mInvokeWith != null && peerUid != 0
&& (args.mRuntimeFlags & Zygote.DEBUG_ENABLE_JDWP) == 0) {
throw new ZygoteSecurityException("Peer is permitted to specify an "
- + "explicit invoke-with wrapper command only for debuggable "
- + "applications.");
+ + "explicit invoke-with wrapper command only for debuggable "
+ + "applications.");
}
}
@@ -888,7 +895,7 @@ public final class Zygote {
return new LocalServerSocket(fd);
} catch (IOException ex) {
throw new RuntimeException(
- "Error building socket from file descriptor: " + fileDesc, ex);
+ "Error building socket from file descriptor: " + fileDesc, ex);
}
}
diff --git a/core/java/com/android/internal/os/ZygoteConnection.java b/core/java/com/android/internal/os/ZygoteConnection.java
index e8d6681a1d17..2f3ad016ad31 100644
--- a/core/java/com/android/internal/os/ZygoteConnection.java
+++ b/core/java/com/android/internal/os/ZygoteConnection.java
@@ -485,9 +485,7 @@ class ZygoteConnection {
closeSocket();
- if (parsedArgs.mNiceName != null) {
- Process.setArgV0(parsedArgs.mNiceName);
- }
+ Zygote.setAppProcessName(parsedArgs, TAG);
// End of the postFork event.
Trace.traceEnd(Trace.TRACE_TAG_ACTIVITY_MANAGER);